python:序列_元组(常用基础知识)

详细如下:

#元组:不可变列表,值不可修改,顺序不可变

#元组有很多继承序列的内容如下:
#序列索引从0开始,从最后起则索引为-1
a = (1,8,3,9,5,6)
b = ('小一','小二','小三')
c = ('Wang','baby','maya','Jiang','an')
aa = list(range(1,11,2))
print(aa)
print(a[2],a[-1],a[-3]) #输出第几项

#切片
print(a[::2])   # 默认从0到最后,每两个输出一个
print(a[1:4:2]) # 从第一个到第四个,每两个
print(a[:2])    # 前三个
print(a[:])     # 全部

print(a+b)      #序列相加
print(a*3)      #序列乘

#检查序列成员
print('小三' in b)  #in 在,not in 不在,结果为true
#序列长度、最大值、最小值;%d数字替代符,n\换行符
print("序列长度:%d\n序列最大值:%d\n序列最小值:%d" %(len(a),max(a),min(a)))

print(list(a))    #序列转为元组
print(str(a))     #序列转为字符串
print(sum(a))     #序列元素+
print(sorted(a))  #序列排序,a内原本顺序不会变
print(list(reversed(a))) #反向元素,a内原本顺序不会变
#序列索引和元素组合
print(list(enumerate(a)))
for i,element in enumerate(a):
    print(i,element)


# -------------------元组-------------------------
#除了对元素的顺序和内容不可添加、修改、删除外,元组有很多同列表一样的功能
#遍历元组
print('遍历元组')
for item in a:
    print(item)

#将a分两列输出
print('将a分两列输出')
for index,item in enumerate(a):
    if index%2 ==0:
        print(item,'\t\t',end='')  #\t:横向空出一个制表符的位置;end='':接下来输出的内容不要换行显示,即:index 0不换行,1换行,2不换行,3换行
    else:
        print(item)


#统计元素的数量a.count()
print(a.count(9))  #结果1
print(a.index(9))  #结果2,9首次出现的索引号

#元组的排序
print('sorted(c):\n',sorted(c))  #序列排序,c内原本顺序不会变
print('sorted(c,key=str.lower,reverse=True):\n',sorted(c,key=str.lower,reverse=True))  #倒序排序,c内原本顺序不会变
print(c)

#元组推导式:(用列表创建的表达式依然可成功创建,******注意:记得加上tuple()******)
#生成指定范围的数值元组
import random
d = tuple(random.randint(11,20)*2 for i in  range(10)) #random.randint(30,90)*2:元素表达式,i:针对后面range的循环变量
print(d)
#生成指定需求的元组,如d的5折
e = tuple(int(x*0.5) for x in d) #x*0.5:元素表达式;x:d中的元素
print(e)
#生成符合条件的元组,如f元组需要0.5的d元素,且0.5d元素依然为偶数
f = tuple(int(x*0.5) for x in d if int(x*0.5)%2==0) #x*0.5:元素表达式;x:d中的元素
print(f)
#创建数字元组
ff = tuple(range(1,13,3))
print(ff)


#二维元组
#使用推导式创建二维元组(用列表创建的表达式依然可成功创建)
g =tuple([random.randint(3,8) for j in range(3) ] for i in range(4))
print(g)
print(g[1][2])  #单个元素

#横版输出古诗,纵版输出古诗
str1 = "千山鸟飞绝"
str2 = "万径人踪灭"
str3 = "孤舟蓑笠翁"
str4 = "独钓寒江雪"
#list1 = tuple((str1),(str2),(str3),(str4))  # 如果这样写会提示:TypeError: tuple() takes at most 1 argument (4 given)
list1 = ((str1),(str2),(str3),(str4))        #正确写法,去掉tuple

print('------------横向古诗-方法1------------')
for itemh in list1:                 #每个子元组存在于元组中
    for item in itemh:              #每个字存在于子元组中
        if itemh.index(item) ==4:   #子元组中最后一个字换行打印,其余不换行打印
            print(item)
        else:
            print(item,end='')


print('------------横向古诗-方法2------------')

for i in range(4):                 #每个子元组存在于元组中
    for j in range(5):              #每个字存在于子元组中
        if j==4:   #子元组中最后一个字换行打印,其余不换行打印
            print(list1[i][j])
        else:
            print(list1[i][j],end='')


print('------------纵向古诗-方法1------------')
list2 = tuple(reversed(list1))   #倒叙古诗句子

for i in range(5):
    for j in range(4):
        if j ==3:
            print(list2[j][i])
        else:
            print(list2[j][i],end='')


#元组常需注意内容
#①如果只有一个元素,记得加逗号
print(type(('测试元组',)),'\t\t',type(('测试元组')))  #结果:<class 'tuple'>          <class 'str'>

#②元组内元素不可添加、修改、删除、更换顺序等,但可对元素重新赋值。
'''③元组推导式,同列表基本一致,需要注意的是记得加上tuple()函数,
即:f = tuple(int(x*0.5) for x in d if int(x*0.5)%2==0)******注意:记得加上tuple()'''

nubmer1 = (i for i in range(3))
print(type(nubmer1))                 #<class 'generator'>
nubmer = tuple(i for i in range(3))
print(type(nubmer))                  #<class 'tuple'>
print(nubmer1.__next__())
print(nubmer1.__next__())
print(nubmer1.__next__())
print(tuple(nubmer1))                #.__next__():遍历生成器对象后,无法再对nubmer1转化为tuple,结果:()

#元组比列表的访问和处理速度快,元组可以作为字典中的键。

猜你喜欢

转载自www.cnblogs.com/jxba/p/9863700.html