[python3] list 列表

 列表:可以说是我们C中的数组。


 1.列表可以把[整数,浮点数,字符串,对象]打包起来。

num = []
num1 = [1,2,3,4,5]
num2 = ['111','222','333']
num3 = [1.1,'abc','你好',[1,2,3]]
print(num)   #[]
print(num1)  #[1, 2, 3, 4, 5]
print(num2)  #['111', '222', '333']
print(num3)  #[1.1, 'abc', '你好', [1, 2, 3]]

2.append(self,object),extend(self, iterable)

#append 向列表添加元素,append()这个方法只能加一个元素
num = ['aa','bb']
num.append('hello')

#同时加入两个或以上元素需要用到这个方法:extend()
#num.extend('abc','ABC')
#print(num)           #TypeError: extend() takes exactly one argument (2 given)    因为该方法添加的是列表的模式

num.extend(['abc','ABC'])
print(num)            #['aa', 'bb', 'hello', 'abc', 'ABC']

append和extend都是向末尾添加数据,差别如下:

num = ['aa', 'bb', 'hello', 'abc', 'ABC']
num.append(['1','2'])  #['aa', 'bb', 'hello', 'abc', 'ABC', ['1', '2']]
num.extend(['1','2'])  #['aa', 'bb', 'hello', 'abc', 'ABC', '1', '2']

3.insert(self, index,object)

num = ['aa', 'bb', 'hello', 'abc', 'ABC']
num.insert(1,'11')
print(num)             #['aa', '11', 'bb', 'hello', 'abc', 'ABC']
num.insert(0,'first')
print(num)             #['first', 'aa', '11', 'bb', 'hello', 'abc', 'ABC']

4.获取数据&删除数据, 列表从小标0开始。当然python支持从最后倒着数,从 -1开始

num = ['aaa','bbb','ccc','ddd','eee']
print(num[0])   #aaa
print(num[4])   #eee
print(num[-1])  #eee
print(num[-5])  #aaa
#pop() 如果不加索引,从列表中取出最后一个元素,然后列表不包含已经取出的数据
num = ['aaa','bbb','ccc','ddd','eee']
a = num.pop()
print(a)    #eee
print(num)  #['aaa', 'bbb', 'ccc', 'ddd']
b = num.pop()
print(b)    #ddd
print(num)  #['aaa', 'bbb', 'ccc']


#pop(index) 加索引,可以取出对应索引位置的数据,原列表中不包含取出后的数据
num = ['aaa','bbb','ccc','ddd','eee']
a1 = num.pop(0)   
print(a1)   #aaa
print(num)  #['bbb', 'ccc', 'ddd', 'eee']
num = ['aaa','bbb','ccc','ddd','eee']
num.remove('aaa')
print(num)    #['bbb', 'ccc', 'ddd', 'eee']

del num[0]
print(num)

del num       #del 可以删除整个列表
print(num) #NameError: name 'num' is not defined

#获取最后一个数字,然后插入到第一个
list = [1,2,3,4,5]
a = list.pop()
list.insert(0,a)
# 其实可以直接缩成一句执行如下:
# list.insert(0, list.pop())
print(list)   #[5, 1, 2, 3, 4]

5.切片

#切片用冒号分开,第一个数字表示起始位置,第二个数字表示结束位置.
# 左闭右开
num = ['aaa','bbb','ccc','ddd','eee']
a = num[1:3]
print(a)     #['bbb', 'ccc']
print(num)   #['aaa', 'bbb', 'ccc', 'ddd', 'eee']

#list也支持负数索引, [-3]5, [-2]9, [-1]4 因事左开右闭,所以是[5,9]
list = [1,2,3,4,5,9,4]
a = list[-3:-1]
print(a)  #[5, 9]

#如果切片起始位置是列表的第一位即0.
a1 = num[0:3] #起始位置为第一位
print(a1)     #['aaa', 'bbb', 'ccc']

a2 =  num[1:] #从起始位置起一直切到最后
print(a2)     #['bbb', 'ccc', 'ddd', 'eee']

a3 = num[:]   #拷贝整个num
print(a3)     #['aaa', 'bbb', 'ccc', 'ddd', 'eee']

#num[0]是取一个值,num[0:1]是取一个列表的分片,等于还是一个列表
a4 = num[0]
a44 = num[0:1]
print(a4)     #aaa
print(a44) #['aaa']

#步长
#步长如果是负数,则是改变方向
list1 = [1,2,3,44,5,9,45]
a1 = list1[::2]
a2 = list1[::-2]
print(a1)   # [1, 3, 5, 45]
print(a2)   # [45, 5, 3, 1]

6.【深拷贝和浅拷贝】问题来了: 原始list1, list2=list1[:] 而list3= list1, 那么list2和list3一样吗?

#切片的方式等于又重新建立了一个列表list2。
# 而使用 = 号,则等于又另起了一个标签list3,指向list1
list1 = [2,4,6,3,7,1,7,9,2,7,2]
list2 = list1[:]
#print('list2=',list2)  #list2= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]
list3 = list1
#print('list3=',list3)  #list3= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]

list1.sort()
print('list1=',list1) #list1= [1, 2, 2, 2, 3, 4, 6, 7, 7, 7, 9]
print('list2=',list2) #list2= [2, 4, 6, 3, 7, 1, 7, 9, 2, 7, 2]
print('list3=',list3) #list3= [1, 2, 2, 2, 3, 4, 6, 7, 7, 7, 9]

延伸问题:为什么?

old = [1,2,3,4,5]
new = old
old = [6]
print(new)  #[1, 2, 3, 4, 5]
print(old)  #[6]

list1 = [9,2,6,4,5]
list2 = list1
list1.sort()
print(list2) #[2, 4, 5, 6, 9]
print(list1) #[2, 4, 5, 6, 9]

7.列表的常用操作符

#列表比较是取第0个的大小返回值
list1 = [1,2,3]
list2 = [3,2,1]
print(list1 > list2) #False
print(list1 < list2) #True
print(list1 == list2) #False

#字符串的比较是比较ASCII的大小
# A--65  a--97
list11 = ['a','b']
list22 = ['A','B']
print(list11 > list22)  #True
print(list11 < list22)  #False
#列表,字符串使用 + 号作为拼接。也可以使用* 号作为重复
list1 = [1,2,3]
list2 = ['a','b','c']
print(list1+list2)  #[1, 2, 3, 'a', 'b', 'c']
print(list2 * 3)    #['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

#成员关系操作符
while 'a' in list2:
    print('True1')   #True1
    break
if 'aa' not in list2:
    print('True2')   #True2

#使用in, not in 系统只判断第一层列表元素,列表中的列表元素不能判断出来,'ab' in list3这样错误
#可以使用 'ab' in list3[2]这样才行

list3 = [1,2,['ab','cd','11'],34]
print(list3[2])     #['ab', 'cd', '11']
print(list3[2][0])  #ab

8.列表的内置函数

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
# count()计算它的参数在列表中出现的次数。
list1= [1,3,0,2,7,3,1,7,3,9]
a = list1.count(3)  #3


# index()返回参数在列表中的位置
list2= [1,3,0,2,7,3,1,7,3,9]
a20 = list2.index(0)      #2
a21 = list2.index(1)      #0  返回第一个数字所在的位置
a27 = list2.index(7,5,9)  #7 从下标为5--9中找7在列表中的位置


#reverse()将整个列表反转,保存
list3= [1,3,0,2]
list3.reverse()  #[2, 0, 3, 1]

list31 = [12, ['ab', 'CD'], 32]
list31.reverse()  #[32, ['ab', 'CD'], 12]

#sort()用指定的方式对列表成员进行排序,默认是从小到大排序。
#sort(func,key,reverse),无参数是默认从小到大,
# 第一个func是指排序的算法,第二个key是指跟这个算法搭配的关键词。第三个参数跟上面的reverse()方法类似,默认参数是false即没有逆行
list4 = [1,3,5,87,2,3,1,5,0,5,8,9,3,1]
#list4.sort()
#print(list4)  #[0, 1, 1, 1, 2, 3, 3, 3, 5, 5, 5, 8, 9, 87]
list4.sort(reverse= True)
print(list4) #[87, 9, 8, 5, 5, 5, 3, 3, 3, 2, 1, 1, 1, 0]

#copy 复制字符串之后给了新的字符串
list1 = [1,2,3,4,5]
list2 = list1.copy()
print(list2) #[1, 2, 3, 4, 5]
list2.pop()  #[1, 2, 3, 4]
print(list2)
print(list1)  #[1, 2, 3, 4, 5]
list2 = [2]
print(list2) #[2]  这里等于重新赋值了
print(list1) #[1, 2, 3, 4, 5]

#clear() 清空
list1.clear()
print(list1) #[]

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值