如果表示的数据少,直接定义几个变量就行了,也有的时候,要表示的数据就比较多。
Python中列表和元组,就是这样的机制,可以用一个变量来表示很多个数据
就类似于其他编程语言中的"数组"
列表和元组,大部分的功能都是差不多的!但是有一个功能是非常明显的区别:
a=[]
b=list()
c=[1,2,3,4]
d = [1, 'a', "hello", 3.14]
print(d) # [1, 'a', "hello", 3.14]
下标访问运算符[]
把[ ]放到一个列表变量的后面,同时[ ]写上一个整数此时它就是下标访问运算符,[]中间写的这个整数,就是称为“下标"或者"索引"。
注意:Python中的下标从0开始。
e = [1, 2, 3, 4, 5]
print(e[0]) # 1
print(e[1]) # 2
print(e[2]) # 3
print(e[3]) # 4
f = [1, 2, 3, 4]
f[2] = 100
print(f) # [1, 2, 100, 4]
len()
来获取列表的长度g = [1, 2, 3, 4, 5, 6]
print(len(g)) # 6
len可以传字符串,列表,元组,字典,自定义的类…=>动态类型
h = [1, 2, 3, 4]
print(h[len(a)-1]) # 4
print(h[-1]) # 4
通过下标操作是—次取出里面第一个元素。
通过切片,则是—次取出一组连续的元素,相当于得到一个子列表。
[:]
来切片a = [1, 2, 3, 4]
print(a[1:3]) # [2, 3]
切片操作中,[ ]里面有两个数字,表示了一段区间。
1表示开始区间的下标
3表示结束区间的下标
[1:3],取到下标为1一直到下标为3的元素!(包含1,不包含3)意思是左闭右开区间[1,3)
b = [1, 2, 3, 4]
# 省略右边界,意思是从开始取到列表结束
print(b[1:]) # [2, 3, 4]
# 省略左边界,从列表的开头取到结束的位置
print(b[:3]) # [1, 2, 3]
# 此处切片可以把下标写成负数
print(b[:-1]) # [1, 2, 3]
# 左右边界都是可以省略的,那么就是整个列表全部打印
print(b[:]) # [1, 2, 3, 4]
c = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(c[::2]) # [1, 3, 5, 7, 9]
print(c[1:-1:2]) # [2, 4, 6, 8]
d = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(d[::-1]) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
e = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(e[0:100]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
总结:
切片操作是一个比较高效的操作,进行切片的时候,只是取出了原有列表中的一个部分,并不涉及到"数据的拷贝"假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高效。
a = [1, 2, 3, 4, 5]
for elem in a:
print(elem)
for i in range(0, len(a)):
print(a[i])
i = 0
while i < len(a):
print(a[i])
i += 1
a = [1, 2, 3]
a.append(4)
a.append(5)
a,append("hello")
print(a) # [1, 2, 3, 4, 5, 'hello']
b = [1, 2, 3, 4]
b.insert(1, "hello")
b.insert(len(b), "world")
print(b) # [1, 'hello', 2, 3, 4, 'world']
a=[1,2,3,4]
print(1 in a) # True
print(10 in a) # False
print(10 not in a) # True
print(a.index(4)) # 3
print(a.index(100)) # 抛异常
b = [1, 2, 3, 4]
b.pop()
print(b) # [1, 2, 3]
c = [1, 2, 3, 4]
c.pop(1)
print(c) # [1, 3, 4]
d = [1, 2, 3, 4, "hello", 3.14]
d.remove(3.14)
print(d) # [1, 2, 3, 4, 'hello']
+
来拼接a = [1, 2, 3]
b = [3.14, 555]
c = a+b
print(c) # [1, 2, 3, 3.14, 555]
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a.extend(b)
print(a) # [1, 2, 3, 4, 5, 6, 7, 8]
print(b) # [5, 6, 7, 8]
print(c) # None
None
这是一个特殊的变量的值,表示"啥都没有",None
非常类似于C里面的NULL。
extend方法,其实是没有返回值的!拿一个变量来接收一个没有返回值的方法的返回值。
+=
来拼接a = [11, 22, 33, 44]
b = [55, 66]
a += b
print(a) # [11, 22, 33, 44, 55, 66]
print(b) # [55, 66]
两者区别:
a += b等价于a = a + b (有临时变量生产,清除原来的值,然后拷贝新值)
a.extend(b)则是直接把b的内容拼到了a的后面(没有多余的拷贝) => 更加高效