列表可以包含不同类型的元素,甚至是Lists,但是通常是同一个类型的。
1 2 3 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] print(squares) |
列表支持使用下标索引元素,支持切片.
1 2 3 4 5 6 7 8 9 10 11 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] item1 = squares[0] print(item1) item2 = squares[-1] print(item2) squaresShallowCopy = squares[1:3] print(squaresShallowCopy) print(squaresShallowCopy[0]) squaresShallowCopy[1:2]=[] print(squaresShallowCopy) |
输出:
1
25
[4, [1, 2]]
4
[4]
所有切片操作都会返回一个包含请求元素的新列表,被称为原列表的浅副本。
1 2 3 4 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] squares.insert(1,3) print(squares) |
输出:
[1, 3, 4, [1, 2], 'whf', 25]
pop无参数就弹出尾部的,有参数可以指定位置:
1 2 3 4 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] squares.pop(1) print(squares) |
输出:
[1, [1, 2], 'whf', 25]
1 2 3 4 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] squares[0]=0 print() |
输出:
[0, 4, [1, 2], 'whf', 25]
1 2 3 4 5 6 7 |
if __name__ == '__main__': squares = [1, 4, [1, 2], "whf", 25] squares+=[66,77] print(squares) squares.append("88") print(squares) print(len(squares)) |
输出:
[1, 4, [1, 2], 'whf', 25, 66, 77]
[1, 4, [1, 2], 'whf', 25, 66, 77, '88']
8
tuple和list比较类似,但是tuple是不可变的,所以不能增删改。
tuple使用括号括起来,使用逗号分隔元素,如果是简单的元组可以不用:
1 2 3 4 5 6 7 8 9 |
t = 1, 2, 3 print(t) t = ((1, 2, 3), (4, 5, 6)) print(t) empty = () print(empty) singleton = 'hello', print(singleton) print(len(singleton)) |
输出:
((1, 2, 3), (4, 5, 6))
()
('hello',)
1
1 2 3 |
t = 1, 2, 3 x, y, z = t print(x, y, z) |
输出:
1 2 3
这个优点像java的final,不能变引用,内容你想变还是可以的:
1 2 3 4 5 |
if __name__ == '__main__': t = ((1, 2, 3), [4, 5, 6]) list=t[1] list[0]=3 print(t) |
输出:
((1, 2, 3), [3, 5, 6])
具名元组,顾名思义就是让普通元组具有名字,方便对元素进行命名和访问:
1 2 3 4 5 |
Student = namedtuple('Student', ['name', 'age', 'city']) s = Student('Xiaoming', '19', 'Beijing') print(s) print(s[1]) print(getattr(s, 'city')) |
输出:
Student(name='Xiaoming', age='19', city='Beijing')
19
Beijing