繁体   English   中英

用Python中的循环理解列表推导[重复]

[英]Understanding List Comprehensions in terms of Loops in Python [duplicate]

这个问题已经在这里有了答案:

这里是非常新的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

但是我知道这是错误的,因为它只是将值附加到第一列。 简而言之,我知道列表理解是从这样的索引中拉出列的更有效的方法,但是此代码是为我提供的,并且我不确定我是否可以凭目前的理解水平自行编写。 为了更好地解析列表理解的想法,我试图找出一种仅可以使用循环来完成的方法,但我还没有找到一种方法。 有人可以帮我解决这个问题,以便希望我能更好地掌握此代码的工作方式吗?

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

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

基本上,大多数列表理解都可以转换为这种模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM