1

我有以下代码。该文件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

j我不想手动递增,而是希望以更简洁的方式进行(例如,在 for 循环的“指令”中,或类似的东西。

处理此任务的更短/更好的方法是什么?

4

2 回答 2

2

您可以使用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)]

另一种方法(可能不那么 Pythonic/效率较低/可读性较差):

您可以将zip两个ranges 放在一起:

for i, j in zip(range(len(range(2, 5))), range(2,5)):
   var[j] = int(content[i])

您知道第二个范围是range(2, 5)并且希望第一个范围是从零到len(range(2, 5))- 即range(len(range(2, 5))).

于 2021-10-05T16:52:00.553 回答
2

计算当前迭代索引的惯用方法是使用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]) 选择列表的一部分
  • 用于从输入序列创建新列表的列表推导
于 2021-10-05T16:55:38.863 回答