一 概念
列表是有序的可变的元素集合,字符串不能变
二 定义

方式1:【元素1,元素2…】
[name1,name2…]
列表是可以嵌套的
items = [12,121,]
name = [1,2,3,'zi',True,items]
print(name,type(name))

方式2 :列表生成式
让你创建一个列表,1-99,不可能从1输入到99
python3进行了修改,不会直接生成列表为了节省空间


方式2 :列表推导式
从一个列表推导出另一个列表

案例1.获取列表中的每个元素的平方,再次组成一个新的列表
以前的做法
nums = [1,2,3,4,5,6,7,8,9,10]
items = []
for num in nums:
# print(num)
# continue:
num1 = num ** 2
# print(num1)
items.append(num1)
print(items)
案例2 :获取奇数元素的平方形成一个新的列表
nums = [1,2,3,4,5,6,7,8,9,10]
items = []
for num in nums:
if num % 2 != 0: #代表是奇数才进行平方操作
# print(num)
# continue:
num1 = num ** 2
# print(num1)
items.append(num1)
print(items)

或者下面这个写法
nums = [1,2,3,4,5,6,7,8,9,10]
items = []
for num in nums:
if num % 2 == 0: ##代表是奇数才进行平方操作
continue
# print(num)
# continue:
num1 = num ** 2
# print(num1)
items.append(num1)
print(items)

而用了列表推导式的写法如下:
案例1:输出每个元素的平方
nums = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10]
items = [num1 **2 for num1 in nums]
print(items)

案例2:
nums = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10]
items = [num1 **2 for num1 in nums if num1 % 2 != 0]
print(items)

三 列表的常用操作
主要包括:增删改查和一些额外的操作
增加操作
num = [1,2,3,4,5]
print(num)
num.append(6)
print(num)
print(num.append(6))

num = [1,2,3,4,5]
print(num)
num.insert(0,6)
print(num)
num1 = [1,2,3,4,5]
num1.insert(1,6)
print(num1)
num2 = [1,2,3,4,5] #这个虽然索引6已经没了,但是在索引6前面插入一个元素还是成立
num2.insert(6,6)
print(num2)

num = [1,2,3,4,5]
print(num)
num1 = ['a','b','c']
num.extend(num1)
print(num)

num = [1,2]
print(num * 3)

num = [1,2,3]
num1 = ['a','b','c']
print(num + num1)
item = [1,2,3]
items = 'abcdef' #把字符串添加进列表
item.extend(items)
print(item)

删除操作
num = [1,2,3]
del num[0]
print(num)
del num
print(num)
num没定义就是num已经没了

num = [1,2,3,4,5]
result = num.pop()
print(result)
print(num)
nums = [1,2,3]
result1 = nums.pop(1)
print(result1)
print(nums)

num = [1,2,3,4]
num.remove(2)
print(num)

利用循环进行remove操作的时候
nums = [1,2,2,2,3,4,2]
for num in nums:
if num == 2:
nums.remove(2)
print(nums)



循环的时候始终删除最左边的2,所以说删除一个最左边的2之后,右边的开始往前移动,这时候指针在3的地方了,但是前面还有一个2没有移除,直到指针到了最后的位置,删除最左边的一个2,只剩下最右边的2了。
修改操作
找到指定的索引的值,直接赋值覆盖即可
num = [1,2,3,4,5]
num[1] = 6
print(num)
nums = [1,2,3,4,5]
nums[-1] = 6
print(nums)

查询操作
num = range(10)
print(num[5])
num1 = [2,3,4,5]
print(num1[2])

num = [1,2,3,4,1,2,3,9]
id = num.index(9)
id1 = num.index(2)
id2 = num.index(2,2,7)
print(id,id1,id2)

num = [1,2,3,4,1,2,3,9]
a = num.count(2)
print(a)

num = [1,2,3,4,2,4,16,8]
print(num[::])
print(num[::-1])
print(num[1:4:])
print(num[1:4:2])

遍历操作
num = [1,2,3,4,5]
for i in num:
print(i)
#我们还想要把对应的索引给输出
nums = [2,3,2,4]
for n in nums:
print(n)
print(nums.index(n))

我们看到当有相同的元素的时候,索引只会取最左边的一个,和字符串一样的道理

因为索引可以设置开始和结束的位置,所以我们可以给index获取开始位置,每次开始位置加一就可以不只是只取最左侧的了
nums = [2,3,2,4]
count = 0
for n in nums:
print(n)
print(nums.index(n,count))
count +=1

num = ['a','b','c','d','e']
#1. 造一个索引列表(我们要查询的,要遍历的索引列表)
for n in range(len(num)):
print(n,num[n])
#2. 遍历整个的索引列表,每一个索引对应一个列表的元素

value = ['a','b','c','d','e']
#1. 先根据列表创建一个枚举对象
print(list(enumerate(value)))

value = ['a','b','c','d','e']
#1. 先根据列表创建一个枚举对象
print(list(enumerate(value)))
#遍历整个的枚举对象(枚举对象,可以直接被遍历)
for idx, val in enumerate(value):
print(idx,val)

索引对象从1开始



迭代
num = [1,2,3]
import collections
result = isinstance(num,collections.Iterable)
print(result)

迭代器和迭代对象是相关联的,对于一个列表来说它是一个迭代对象,迭代器一开始在这个列表的最前面,当迭代去调用next函数的时候,迭代器会依次往下迭代
迭代器也是可迭代对象,所以也可以作用于for in循环


注意:Python3.9以后的版本这里改了

为什么要用迭代器呢?
迭代器简单使用:使用next()函数,从迭代器中取出下一个对象,从第一个元素开始
num = [1,2,3,4]
l = iter(num)
print(next(l))
print(next(l))
print(next(l))
print(next(l))

因为迭代器比较常用,所以在python中,可以直接作用于for in,内部会自动调用迭代器对象的next(),会自动处理迭代完毕的错误
注意事项:迭代器一版不能多次迭代,只能使用一次
num = [1,2,3,4]
l = iter(num)
for i in l:
print(i)
print('------------')
for i in l:
print(i)

常用操作:判定和比较
num = [1,2,3,4,5]
print(1 in num)
print(12 in num)

比较操作
cmp():内建函数,如果比较的是列表,则针对每个元素从左到右逐一比较(但是3以后不支持用下面的大于号小于号即可)
如果左>右 ----- 1,左==右— 0,左<右------ -1
列表的排序操作
num = [1,3,6,2,8]
result = sorted(num)
result1 = sorted(num,reverse=True)
print(result)
print(result1)

对于下面这个列表里面的元组进行排序,我们可以看到是根据元素的第一个key进行排序的,如果想根据value进行排序我们就要改sorted的key
s = [('sz1',15),('sz',19),('sz3',18),('sz2',17)]
result = sorted(s)
print(result)

s = [('sz1',15),('sz',19),('sz3',18),('sz2',17)]
def getKey(x): #定义一个函数,讲列表里面的元组拿下来,并且返回value
return x[1]
result = sorted(s,key=getKey) #讲value传进去,按照value进行排序
print(result)

num = [1,2,5,3,4]
result = num.sort()
print(result)
print(num)

s = [('sz1',15),('sz',19),('sz3',18),('sz2',17)]
result = s.sort()
print(s)

s = [('sz1',15),('sz',19),('sz3',18),('sz2',17)]
def getKey(x):
return x[1]
result = s.sort(key=getKey) #这里getKey不要加小括号,小括号是调用
print(s)

那么我们可以看出来方法一和方法二的区别:方法一是内建函数,可以对任何可迭代对象进行操作,而方法二是列表方法,只能针对于列表操作;方法一不会改变原列表或者原来的可迭代对象;而方法二则会改变原来的列表
import random
l = [1,2,3,4,5]
random.shuffle(l)
print(l)

l = [1,2,3,4,5]
l.reverse()
print(l)
