在for循环中分别递增2个不同的参数

  • 本文关键字:2个 参数 循环 for python
  • 更新时间 :
  • 英文 :


我有以下代码。文件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])来选择列表的一部分
  • 从输入序列创建新列表的列表推导式

最新更新