python中xyz从小到大和_Python学习(4):列表

Python学习(4):列表

Python学习

1. 列表:打了激素的数组与其他编程语言中的数组不同,python中的列表可以包含不同的数据类型

创建普通列表(同种数据类型):

member=['a','b','c','d','e','f','g']

number=[1,2,3,4,5]创建混合列表(不同数据类型):

mix=[1,'abc',3.141592653,[1,2,3]]创建空列表:

empty=[]向列表添加元素:

#append将指定元素添加到指定列表末尾。append只接受一个参数

member.append('hijk')

#extend可以同时添加多个元素,但是它们需要组成一个列表

member.extend(['l','m','n'])

#insert可以在列表中指定位置添加元素。接受两个参数,第一个参数是插入的位置索引,第二个参数是插入的元素

member.insert(0,'xyz')与数组一样,我们可以通过元素的索引值(index)从列表中获取单个元素

member[0]

#得到结果:'xyz'从列表中删除元素:

member

#结果:['xyz','a','b','c','d','e','f','g','hijk','l','m','n']

#remove方法删除指定元素,接受参数为指定元素的内容

member.remove('hijk')

mix.remove([1,2,3])

#del语句,删除指定内容

delmember[0]#删除'xyz'

delnumber#删除整个number列表

#pop方法,从列表末尾删除指定元素并返回其内容

member.pop()#删除了'n'并将其返回

#pop方法还可以接受一个参数,该参数是列表的索引值

member.pop(1)#删除了'b'并将其返回列表分片/切片(Slice):一次性获取多个元素

member

#结果:['a','c','d','e','f','g','l','m']

member[1:3]

#得到结果:['c','d']。列表切片list[a:b]返回的是从索引a开始到索引b-1为止的元素列表。原列表并没有改变,返回的是新的列表

member[1:1]

#得到结果:[]。当b<=a时,返回空列表

member[:3]

#得到结果:['a','c','d']

member[1:]

#得到结果:['c','d','e','f','g','l','m']

member[:]

#得到结果:['a','c','d','e','f','g','l','m']

#以上三种简写很有用处。第三种得到的是原列表的复制

2. 列表的常用操作符比较操作符

list1=[123,456]

lsit2=[234,123]

list1>list2

#得到结果:False

#列表的比较从第一个元素开始,一旦有结果立即返回

list3=[123,456]

(list1

#得到结果:True列表的拼接:

list4=list1+list2

#list4的值为:[123, 456, 234, 123]

#注意:虽然看起来+可以实现extend的功能,但是有很多限制,+两边的类型必须一致,list1 + 'abc'或者list1 + 123这样的情况会报错。要扩展列表还是使用extend更为明确

list3*=3

#list3的值变为:[123,456,123,456,123,456]成员关系操作符

123inlist3

#返回:True

'abc'inlist3

#返回:False

'abc'notinlist3

#返回:True

123notinlist3

#返回:False

test=[123,['abc','def'],456]

'abc'intest

#返回:False

'abc'intest[1]

#返回:True

#in和not in只影响一层关系,如果要判断数组中的数组,需要加上索引列表类型的内置函数:

list3

#值为:[123, 456, 123, 456, 123, 456]

list3.count(123)

#返回:3。count方法返回指定元素在列表中出现的次数

list3.index(456)

#返回:1。index方法返回指定元素在列表中第一次出现的索引

list3.index(456,3,5)

#返回:3。后两个参数指定查询索引的范围

list3.index(456,4,5)

#返回:ValueError:456 is not in list。没找到时会返回错误

list3.index(456,4,6)

#返回:5。第三个参数是右边界,不包括在查询范围内

test

#值:[123, ['abc', 'def'], 456]

test.reverse()

test

#返回:[456, ['abc','def'], 123]。注意到元素翻转了,但列表中的列表没有翻转,若要将其也翻转,需要指定下标再次操作:test[1].reverse()

test.sort()

#报错:TypeError:unorderable types:list()

listtest=[4,2,5,1,9,23,32,0]

listtest.sort()

listtest

#返回:[0, 1, 2, 4, 5, 9, 23, 32]

#sort()没有参数时,默认从小到大排序

#sort(func, key, reverse)。sort有三个参数,第一个是排序算法,第二个是和算法搭配的关键字,第三个参数是bool值,默认为False。若将reverse的值改为True,那么返回的将是从大到小排序。

listtest.sort(reverse=True)

listtest

#返回:[32, 23, 9, 5, 4, 2, 1, 0]注意:reverse()和sort()两个方法没有返回值,它们直接操作原列表

3. 补充关于列表分片和直接赋值的区别:

listtest

#值为:[32, 23, 9, 5, 4, 2, 1, 0]

list5=listtest[:]

list6=listtest

#此时list5和list6的值均为[32, 23, 9, 5, 4, 2, 1, 0]

listtest.sort()

#将listtest排序后,list5的值为[32, 23, 9, 5, 4, 2, 1, 0],list6的值为[0, 1, 2, 4, 5, 9, 23, 32]注意:只有针对原列表本身的操作才会引起这种情况,如果重新对原变量赋值,那么list6将不会改变关于append和extend的区别:

member=['a','b']

member.append(['c','d'])

#此时member值为:['a', 'b', ['c', 'd']]

member.extend(['e','f','g'])

#此时member值为:['a', 'b', ['c', 'd'], 'e', 'f', 'g']

append是将参数作为一个元素添加到列表的末尾;

extend是将参数作为一个列表去扩展列表的末尾。列表分片的步长属性:

list1=[1,3,9,5,7]

list1[0:5:2]

#返回:[1, 9, 7]

#步长不能为0

list1[::0]

#报错:ValueError: slice step cannot be zero

#步长为负数时从右到左

list1[::-2]

#返回:[7, 9, 1]

#步长大于列表长度时,仅返回指定的元素

list1[::8]

#返回:[1]

list1[3:9:7]

#返回:[5]请看例子:

old=[1,2,3,4,5]

new=old

old=[6]

print(new)

#得到结果为:[1, 2, 3, 4, 5]

注意:这里的赋值和第一个补充里的赋值不一样,new被赋值为old,但是之后old被赋予了另外的值,此时new的值不变;而第一个补充里的list6被赋值为listtest,而listtest本身作了改变,所以list6的值跟着改变。列表推导式(列表解析)

列表推导式(List comprehensions)也叫列表解析,用于动态地创建列表,其语法如下:

[有关A的表达式] for A in B

[x*xforxinrange(10)]

#返回:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

#上面的列表推导式相当于:

list1=[]

forxinrange(10):

list1.append(x*x)

而列表推导式可以更为复杂一些:

[(x,y)forxinrange(10)foryinrange(10)ifx%2==0ify%2!=0]

#返回:[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9),

(2,1),(2,3),(2,5),(2,7),(2,9),

(4,1),(4,3),(4,5),(4,7),(4,9),

(6,1),(6,3),(6,5),(6,7),(6,9),

(8,1),(8,3),(8,5),(8,7),(8,9)]

#上面的列表推导式相当于:

list1=[]

forxinrange(10):

foryinrange(10):

ifx%2==0:

ify%2!=0:

list1.append((x,y))

来做一个习题巩固一下:

list1=['1.Just do it','2.一切皆有可能','3.Impposible is nothing']

list2=['3.阿迪达斯','2.李宁','1.耐克']

#请编写一个列表推导式,使其返回的列表如下:

#['1.耐克:Just do it', '2.李宁:一切皆有可能', '3.阿迪达斯:Impossible is nothing']

下面是我的答案:

[y+':'+x.split('.',1)[1]forxinlist1foryinlist2ifx.split('.',1)[0]==y.split('.',1)[0]]

下面是参考答案:

[name+':'+slogan[2:]forsloganinlist1fornameinlist2ifslogan[0]==name[0]]

完(2015年6月8日)2015年6月24日,增加补充部分append与extend的区别

2015年6月29日,增加补充部分步长属性说明

2015年6月30日,增加补充部分剩余内容。请熟练掌握列表推导式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值