首页 > 解决方案 > Python For 循环单行语法

问题描述

我有几个类,我正在使用 csv 文件作为输入进行初始化。读取 csv 文件并通过以下方式初始化对象:

input_file  = open(sys.argv[1], 'r')
csv_file = csv.reader(input_file)

for line in csv_file:
    if line[0] == "object":
        objects.append(object(line));

这些类之一定义为:

class object:
    def __init__(self,line):
        self.type = line[1]
        self.list = ....

我需要以遵循以下逻辑的方式填写列表:

if line[1] == 'a':
    for element in line[4:15]:
         self.list.append(element)

本质上,如果类型为“a”,我想用元素 4 到 14 填充列表,否则将其留空。有没有办法可以在初始化期间将 if 和 for 循环变成一行代码来填充列表(或不填充)?或者真的任何我可以在初始化期间填写列表的方式。

很抱歉,我并没有真正使用 python 并且还没有完美地掌握语法,因为我现在主要习惯于使用 C 和 C++。

标签: pythonfor-loopif-statement

解决方案


您可以为此使用条件表达式:

self.list = line[4:15] if line[1] == 'a' else []

与列表理解建议不同,这只执行line[1] == 'a'一次检查。它还完全避免了显式迭代line[4:15],这已经是一个列表。

如果要将元素转换为整数,可以使用列表推导,但将条件检查保持在推导之外以避免冗余检查:

self.list = [int(x) for x in line[4:15]] if line[1] == 'a' else []

推荐阅读