<p>第一个想法:你可以在一个外循环中迭代你的所有列表,并将你的第二个想法应用到这个上面。然后为<code>x</code>内的每个列表创建一个子目录。这样,您就可以为所有内容创建3个循环,而不是为每个列表创建一个循环:</p>
<pre><code>x = {}
list_number = 1
for list in x1, x2, x3, x4:
for q1 in range(0, 20):
for q2 in range(0, len(list.var)):
x['x{}'.format(list_number)]['mean' + str(q1)] = np.mean(list.X[:,q2])
list_number += 1
</code></pre>
<p>我们也可以用dict理解来代替循环(这并不能真正消除循环,但会缩短代码):</p>
<pre><code>x['x{}'.format(list_number)] = {'mean'+str(q1): np.mean(list.X[:,q2]) for q2 in range(0, len(list.var))}
</code></pre>
<p>也就是说,虽然我不知道你的数据是如何构造的,但是有一个dict的形式</p>
<p><code>lists = {'x1': [the_list], 'x2': [other_list], ...}</code></p>
<p>对于这类任务总是更好的。因为没有真正好的方法来<a href="https://stackoverflow.com/questions/18425225/getting-the-name-of-a-variable-as-a-string/18425523">get the name of a variable</a>,所以将它们作为字符串键存储在dict中可以更容易地使用它们。这使您可以执行以下操作:</p>
<pre><code>means = {name: {'mean'+ str(q + 1): np.mean(lists[name].X[:,q]) for q in range(len(lists[name].var))} for name in lists}
</code></pre>
<p>它将返回一个</p>
<pre><code>means = {'x1': {'mean1': mean_1, 'mean2': mean_2, ...}, 'x2': {'mean1': mean_1,...}...}
</code></pre>
<p>用一个循环来完成所有这些都是不可能的,至少就目前的数据结构而言是不可能的,因为您必须迭代至少两个iterable:</p>
<ol>
<li><p>所有列表;</p></li>
<li><p>每个元素的所有元素都列出了变量。</p></li>
</ol>