为什么on语句创建一个6x6数组,而其他语句创建一个1x6数组

2024-10-04 07:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

另一个超级noob问题 为什么

a = [["?" for i in range(6)] for i in range(6)]

创建一个6x6阵列,带有单独的“?”s

print(a)

给予

[['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]

但是

a = [["?" * 6] *6]

一起创建带有“”的a1x6阵列

print(a)

给予

[['??????', '??????', '??????', '??????', '??????', '??????']]

如何创建6x6而不在声明步骤中使用for循环


Tags: in声明for步骤rangeprintnooba1x6
2条回答

让我们看看你写的东西

a = [["?" * 6] *6]

中间位"?" * 6是一个由6个问号组成的字符串。当你用方括号括起来时,你会得到一个包含这个字符串的列表,所以

['??????']

然后将该列表乘以6,得出:

['??????', '??????', '??????', '??????', '??????', '??????']

你把整件事都放在另一张单子上

[['??????', '??????', '??????', '??????', '??????', '??????']]

或者,您可能打算这样做:

[['?'] * 6] * 6

这确实给了你一个你想要的列表

[['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]

然而,这实际上是另一个列表中的一个内部列表['?', '?', '?', '?', '?', '?']六次。因此,如果您尝试修改内部元素,您会发现每个内部列表都被修改

您最好使用列表理解或中间立场,即:

a = [['?'] * 6 for _ in range(6)]

如果必须在没有明确的for的情况下执行此操作:

import itertools

>>> s = '?'*6
>>> s
'??????'
>>> q = itertools.repeat(s,6)
>>> list(map(list,q))
[['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'],
 ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'],
 ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]
>>>

>>> s
'??????'
>>> z = zip(*itertools.tee(s,6))
>>> list(z)
[('?', '?', '?', '?', '?', '?'), ('?', '?', '?', '?', '?', '?'), ('?', '?', '?', '?', '?', '?'), ('?', '?', '?', '?', '?', '?'), ('?', '?', '?', '?', '?', '?'), ('?', '?', '?', '?', '?', '?')]
>>>

相关问题 更多 >