根据Python中的循环理解列表理解

时间:2018-01-15 20:17:09

标签: python list loops list-comprehension

非常新的Python学习者 - 请保持温和。 我在使用Python中的列表推导概念时遇到了一些问题,所以我试图用for循环来区分列表推导代码。

我遇到了一个问题,其中我有两个列表:一个是值列表,第二个是索引列表。工作是使用索引列表从值列表中提取这些列以创建更短的列表。例如,如果列表是:

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

但我知道这是错误的,因为它只是将第一列的值添加到第一列。 简而言之,我知道列表理解是从这样的索引中提取列的更有效方法,但是这段代码是为我提供的,我不确定我是否可以用我目前的理解水平自己编写它。为了更好地解析列表理解的想法,我试图找出一种只能使用循环的方法,但我还没有想出办法。有人可以帮我解决这个问题,希望我能更好地处理这段代码的工作原理吗?

1 个答案:

答案 0 :(得分:5)

您需要在内循环开始之前创建一个临时list,然后填充它:

for row in my_table:
    new = []
    for idx in col_indices:
        new.append(row[idx])
    col_list.append(new)    

基本上,大多数列表推导都可以用这种模式转换为循环。