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

cha*_*low 0 python loops list-comprehension list

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

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

my_table = ['1', '2', '3', '4']
           ['5', '6', '7', '8']
           ['-2', '-3', '-4', '-5']

col_indices = [0, 2]
Run Code Online (Sandbox Code Playgroud)

我们想要:

Output = ['1', '3']
         ['5', '7']
         ['-2', '-4']
Run Code Online (Sandbox Code Playgroud)

所以我之前在Stack Overflow上看过这篇文章,我知道用一个列表理解来做到这一点的方法如下:

answer = []
for row in my_table:
    reduced_row = [row[idx] for idx in col_indices] 
    answer.append(reduced_row)
return answer
Run Code Online (Sandbox Code Playgroud)

说实话,我有点得到这个但不完全.为了更好地理解我尝试编写一些嵌套循环来获得相同的结果,但意识到我没有一个很好的方法用我目前的理解水平来做到这一点.

最初我尝试了以下内容:

col_list = []
for row in my_table:
    for idx in col_indices:
        new = [row[idx]]
        col_list.append(new)    
return col_list
Run Code Online (Sandbox Code Playgroud)

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

geo*_*xsh 5

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

for row in my_table:
    new = []
    for idx in col_indices:
        new.append(row[idx])
    col_list.append(new)    
Run Code Online (Sandbox Code Playgroud)

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