|NO.Z.00015|——————————|BigDataEnd|——|Hadoop&Python.v15|——|Arithmetic.v15|语法:数据结构&元组tuple.V2|
一、元组 tuple:定义元组
~~~     # 现在我们知道了字符串是一种序列,它可以迭代循环,也可以按索引访问,也可以切片访问。但它的组成只能是单个的字符,现在来介绍一种更多元化的序列:元组,英文叫tuple,可这样来定义一个元组:
t = ('My', 'age', 'is', 18)
~~~     # 在这个元组中包含了3个字符串,一个整形数字,元组中的每一项称作元素,4个元素按照从左到右的顺序排列。可以用下标索引访问:
t[0] # 'my'
t[-1] # 18~~~     # 也可以通过切片来访问,注意切片返回的是一个包含切片片段的新元组。
t[0:2] # ('My', 'age')
~~~     # 事实上元组定义的时候也可以不用括号
t = 'My', 'age', 'is', 18~~~     # 但当,元组中只有一个元素的时候,必须要加一个逗号:
t = ('solo',)
     
~~~     # 或者不带括号
t = 'solo',~~~     # 可以将一个序列强制转换为元组  
~~~     # 后面的逗号表明这是一个元组,否则就会被认为是一个字符串。
tuple('abc') # ('a', 'b', 'c')
tuple(range(5)) # (0, 1, 2, 3, 4)二、元组操作
~~~     # 现在我们介绍字符串的另一个函数join,有了它,可以把元组这样的序列拼接成一个整体的字符串。
~~~     # 注意最后一个元素
t = ('My', 'age', 'is', "18")
print(" ".join(t))
~~~     # 输出结果:'My age is 18'~~~     # 注意最后一个元素,这次我们将它设置成了字符串,因为join函数要求参数序列中的每一个元素都必须是字符串。
~~~     # 和字符串一样,元组也有count, index函数,使用的方法也是一样:
t = ('a', 'b', 'b', 'a')
t.count('a') # 2
t.index('b') # 1
t.index('c') # Error
# 查看长度
len(t) # 4~~~     # 元组也支持 in 操作,想要判断元组中是否包含某个元素:
'a' in t # True
'x' in t # False
~~~     # 最后,需要记住的是元组和字符串都是只读的,也就是不可修改的。我们不能单独改变元组中的某个元素,或者是字符串中的某个字符。三、遍历元组
~~~     # 元组属于序列,所以可以像字符串那样去遍历它:
lst = ('a', 'b', 'c', 'd', 'e')
for i in lst:
print(i)~~~     # 使用for循环可以方便快捷的遍历元组,上面的例子将打印出元组中的每一个元素。也可以使用while来遍历元组,虽然并不经常这样使用。
lst = list(range(10))
i = 0
while i < 10:
print(lst[i])
i += 1四、综合案例:销售数据统计-销冠
~~~     # 在真实的项目中,数据结构通常是比较复杂,经常碰到嵌套的元组,甚至是多层嵌套,我们来看一个例子:
~~~     # 当元组元素较多、较长时,可以这样书写
sales = (
("Peter", (78, 70, 65)),
("John", (88, 80, 85)),
("Tony", (90, 99, 95)),
("Henry", (80, 70, 55)),
("Mike", (95, 90, 95)),
)~~~     # 这是包含某公司所有销售人员第一季度销售业绩的元组,单位是万元,其中的每一个元素对应一个销售人员的信息,人员信息也是一个元组,包括姓名和业绩,业绩又是一个元组,按照顺序分别是1、2、3月份的销售额。需求:找出总销售额最高的那个员工,并将TA的名字和总销售额输出。
champion = ''
max_amount = 0
for sale in sales:
name = sale[0]
quarter_amount = sale[1]
total_amount = 0
for month_amount in quarter_amount:
total_amount += month_amount
if total_amount > max_amount:
max_amount = total_amount
champion = name
print("第一季度的销冠是%s, TA的总销售额是%d万元" % (champion, max_amount))~~~     # 上面的代码也可进一步优化一下,使得代码行数更少,结构更简单。
champion = ''
max_amount = 0
for name, quarter_amount in sales:
total_amount = sum(quarter_amount)
if total_amount > max_amount:
champion, max_amount = name, total_amount
print("第一季度的销冠是%s, TA的总销售额是%d万元" % (champion, max_amount))
~~~     # 这里用到了一个sum函数,它是Python内置函数,可以计算出一个序列里所有数值的总和。Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
