我有以下代码。文件file.txt
包含一个变量列表。部分为str
型,部分为int
型。
var = [None] * 3
j = 0
with open("file.txt", "r") as f:
content = f.readline().split(";")
for i in range(2, 5):
var[j] = int(content[i])
j += 1
我想用一种更干净的方式(例如在for循环的"指令"中,或类似的东西)来代替手动增加j
。
处理这个任务的更短/更好的方法是什么?
您可以使用enumerate
:
for i, j in enumerate(range(2,5)):
var[j] = int(content[i])
同样,您根本不需要初始化var
—只需使用列表推导式:
var = [int(content[i]) for i in range(2, 5)]
另一种方法(可能不那么python化/效率更低/可读性更差):
zip
可以两个一起range
年代:
for i, j in zip(range(len(range(2, 5))), range(2,5)):
var[j] = int(content[i])
您知道第二个范围是range(2, 5)
,并且希望第一个范围是从0到len(range(2, 5))
-即range(len(range(2, 5)))
。
计算当前迭代索引的惯用方法是使用enumerate
:
for j, i in enumerate(range(2, 5)):
var[j] = int(content[i])
(在本例中不需要初始化j = 0
)
然而,你的示例代码通常只会写成:
with open("file.txt", "r") as f:
content = f.readline().split(";")
var = [int(x) for x in content[2:5]]
使用诸如
之类的语言特性- 一个切片(
[2:5]
)来选择列表的一部分 - 从输入序列创建新列表的列表推导式