<p>如果没有<em>some</em>排序的循环,就没有办法创建这样的列表。不过,隐藏循环有多种方法,就像<code>[[]] * x</code>隐藏循环一样。还有列表理解,它“隐藏”了表达式中的循环(幸运的是它仍然很明显),还有<code>map(list, [[]]*x)</code>它有两个隐藏的循环(一个在<code>[[]] * x</code>中,另一个在<code>map</code>中,使用<code>list()</code>创建每个列表的副本)</p>
<p>也有可能事先不创建列表列表。其他的答案已经涵盖了简单的方法,但是如果这不符合你的需要,还有其他的方法。例如,可以根据需要创建一个函数,将空列表追加到<code>result</code>列表中,并调用该函数:</p>
<pre><code>def append(L, idx, item):
while len(L) <= idx:
L.append([])
L[idx].append(item)
for i in range(x):
for j in someListOfElements:
append(result, i, j)
</code></pre>
<p>或者可以使用<code>collections.defaultdict(list)</code>而不是列表:</p>
<pre><code>import collections
result = collections.defaultdict(list)
for i in range(x):
for j in someListOfElements:
result[i].append(j)
</code></pre>
<p>这样做的好处是使用一个已经存在的类型,这是一个较少的工作,但它确实意味着您现在有一个dict(由整数索引)而不是一个列表,这可能是您想要的,也可能不是您想要的。或者您可以创建一个行为类似于列表但将新列表附加到自身而不是引发索引器错误的类,例如:</p>
<pre><code>import UserList
class defaultlist(UserList.UserList):
def __getitem__(self, idx):
while len(self) <= idx:
self.append([])
return UserList.UserList.__getitem__(self, idx)
result = defaultlist()
for i in range(x):
for j in someListOfElements:
result[i].append(j)
</code></pre>