【发布时间】:2018-06-24 12:03:36
【问题描述】:
这里是非常新的 Python 学习者 - 请温柔一点。 我在理解 Python 中列表推导的概念时遇到了一些问题,因此我试图将列表推导代码等同于 for 循环。
我遇到了一个问题,其中我有 2 个列表:一个是值列表,第二个是索引列表。工作是使用索引列表从值列表中提取这些列,以创建一个较短的列表。例如,如果列表是:
my_table = ['1', '2', '3', '4']
['5', '6', '7', '8']
['-2', '-3', '-4', '-5']
col_indices = [0, 2]
我们想要:
Output = ['1', '3']
['5', '7']
['-2', '-4']
所以我之前在 Stack Overflow 上看到过这篇文章,我知道用一个列表理解来做到这一点的方法如下:
answer = []
for row in my_table:
reduced_row = [row[idx] for idx in col_indices]
answer.append(reduced_row)
return answer
说实话,我有点明白这一点,但并不完全明白。为了更好地理解,我尝试编写一些嵌套循环来获得相同的结果,但我意识到我目前的理解水平没有很好的方法来做到这一点。
最初我尝试了以下方法:
col_list = []
for row in my_table:
for idx in col_indices:
new = [row[idx]]
col_list.append(new)
return col_list
但我知道这是错误的,因为它只是将值附加到第一列。 简而言之,我知道列表理解是从这样的索引中提取列的更有效方法,但是这段代码是为我提供的,我不确定以我目前的理解水平我是否可以自己编写它。为了更好地解析列表理解的想法,我试图找出一种只能使用循环来完成的方法,但我还没有找到一种方法来做到这一点。有人可以帮我解决这个问题,希望我能更好地了解这段代码的工作原理吗?
【问题讨论】:
-
您知道上面的代码返回了意外的缩进,后跟
TypeError: list indices must be integers or slices, not tuple -
有一个将列表理解转换为 for 循环的答案。请注意,您可以使用嵌套列表理解来完成整个操作:
[[row[i] for i in col_indices] for row in my_table] -
感谢您的链接,我为可能的重复道歉 - 我看到的大部分帖子都是关于如何使循环进入列表理解,我正在向后工作,所以它们并不是特别相关。 @juanpa.arrivillaga 我确实认为我在概念上理解你更紧凑的列表理解;谢谢你。现在似乎只是练习的问题,直到我能够认识到获得所需格式的细微差别。
标签: python list loops list-comprehension