
1 kkwezard 2015-06-25 16:09:08 +08:00 a = [0] * 100 |
2 hahastudio 2015-06-25 16:09:53 +08:00 你要的是 [0] * 100 还是 [0 for i in range(100)] 呢 |
3 db253874 2015-06-25 16:09:55 +08:00 a = [0,] * 100 |
4 Azul 2015-06-25 16:11:13 +08:00 list(map(int, 100*'0')) 应该还有比这个好的吧 |
5 hjq98765 OP |
6 hjq98765 OP @hahastudio 第一种方法看起来简单些 |
7 hahastudio 2015-06-25 16:16:46 +08:00 |
8 hahastudio 2015-06-25 16:19:16 +08:00 |
9 aiver 2015-06-25 17:36:07 +08:00 如@hahastudio说的,如果直接用[0]*100的做法有坑,推荐使用列表推导式构建[0 for i in range(100)] |
10 lilydjwg 2015-06-25 19:31:25 +08:00 |
11 weyou 2015-06-25 23:22:35 +08:00 就原题来讲,当然是a = [0] * 100最简单。 至于坑,那是另外的情况了。 |
12 zerh925 2015-06-26 00:08:26 +08:00 import numpy as np a = np.zeros((1, 100)).tolist()[0] just for fun |
13 firemiles 2015-06-26 07:46:04 +08:00 @hahastudio 这个有什么问题吗,我在python2.7.9下运行是一样的,难道在3下改变了吗? |
14 firemiles 2015-06-26 08:10:47 +08:00 @hahastudio 刚想明白了[[1,2]]*100产生的100个list指向相同的对象,修改其中一个时会改变其他99个 |
16 aheadlead 2015-06-26 14:19:04 +08:00 @Yiph 至少python2下面是这样的 >>> class foo: ... pass ... >>> s = foo() >>> s.a = 233 >>> a = [s]*10 >>> a[0].a 233 >>> a[1].a 233 >>> a[2].a 233 >>> a[0], a[1], ..., a[9] 都指向了同一个对象 >>> for item in a: ... print id(a) ... 4522747664 4522747664 4522747664 4522747664 4522747664 4522747664 4522747664 4522747664 4522747664 4522747664 >>> |
17 aiver 2015-06-26 15:00:26 +08:00 @Yiph 如果乘的对象是 immutable ,那么这种方式就没问题,但如果是 mutable 的,你一旦改变了其引用的值,所有的结果都会变。具体如下: a = [[1, 2], [3, 4]] b = [a] * 3 此时b为:[[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]] 如果改变b引用的值: b[0].append(0) b所有乘的地方都会变,此时b为:[[1, 2, 0], [3, 4], [1, 2, 0], [3, 4], [1, 2, 0], [3, 4]] 而不只是b[0]发生了变化 |