python - 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++。
解决方案
您可以为此使用条件表达式:
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 []
推荐阅读
- scala - Kleisli 如何是一个单子变压器?
- pandas - 如果一组行不满足条件,如何删除它们?
- applescript - AppleScript - 从磁盘读取的数组为空
- react-native - React Native FlexBox & Wrap - 如何检测元素是否移动到下一行?
- docker - Jenkins docker slave 配置错误:SSH 服务在 43 秒后没有启动
- r - 变量“中”的无效类型(列表)和值不是唯一标识的
- javascript - Reactjs 中获取错误处理的问题
- python - 有没有办法找到特定字符的跨度,然后是任意数量的特定字符?
- cron - crontab 不执行 .sh 文件
- r - 为按一个离散因子分组的 ecdf 图着色,以使用不同(连续)因子连续着色?