m******n 发帖数: 453 | 1 a=[1]*3
print(a)
a[0]=100
print(a)
结果是
[1, 1, 1]
[100, 1, 1]
这当然没问题
b=[[1] * 3] *3
print(b)
b[0][1] = 100
print(b)
结果是
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[1, 100, 1], [1, 100, 1], [1, 100, 1]]
啊?????? | x**********i 发帖数: 658 | 2 用*号建的list是引用
【在 m******n 的大作中提到】 : a=[1]*3 : print(a) : a[0]=100 : print(a) : 结果是 : [1, 1, 1] : [100, 1, 1] : 这当然没问题 : b=[[1] * 3] *3 : print(b)
| s*********n 发帖数: 34 | 3 同一个数组被指向了3次。
应该这么写:
b=[[1] * 3 for i in range(3)] | y********4 发帖数: 1116 | 4 Python里面所有都是对象,等号只是赋予指针,你就理解了。
【在 m******n 的大作中提到】 : a=[1]*3 : print(a) : a[0]=100 : print(a) : 结果是 : [1, 1, 1] : [100, 1, 1] : 这当然没问题 : b=[[1] * 3] *3 : print(b)
| a*****g 发帖数: 7 | 5 Immutable跟mutable的区别
Integer是immutable, list是mutable
【在 m******n 的大作中提到】 : a=[1]*3 : print(a) : a[0]=100 : print(a) : 结果是 : [1, 1, 1] : [100, 1, 1] : 这当然没问题 : b=[[1] * 3] *3 : print(b)
| m*****n 发帖数: 3575 | | n***p 发帖数: 110 | | l****u 发帖数: 1764 | 8 list comprehension 正解,楼上的方法可行:
b = [[1]*3 for _ in range(3)] | g****t 发帖数: 31659 | 9 我直接emacs一个快捷键,paste出来for loop
从来不用这种高级的东西。
: 同情要对付这种坑的程序员
【在 n***p 的大作中提到】 : 同情要对付这种坑的程序员
| s*********n 发帖数: 34 | 10 大牛你也用Python吗?
【在 g****t 的大作中提到】 : 我直接emacs一个快捷键,paste出来for loop : 从来不用这种高级的东西。 : : : 同情要对付这种坑的程序员 :
| g****t 发帖数: 31659 | 11 我不是大牛。我每天都用。
我买了个pythonista在iOS app,非常好用。
可以随时单手在iphone写python 。
: 大牛你也用Python吗?
【在 s*********n 的大作中提到】 : 大牛你也用Python吗?
| C*****l 发帖数: 1 | 12 list comprehension效率更高
【在 g****t 的大作中提到】 : 我直接emacs一个快捷键,paste出来for loop : 从来不用这种高级的东西。 : : : 同情要对付这种坑的程序员 :
|
|