具有多个 for 循环的列表理解

List comprehension with multiple for loop

我尝试通过阅读 CL 参数来理解列表

weights = [[int(arg) for arg in sys.argv[i]] for i in range(3,7)]

这是我实现的,但输出是一个多维数组,如:

[[3], [4], [5], [6]]

我试图通过一行列表理解得到的是:

[3, 4, 5, 6]

我认为你过于复杂了。如果您希望命令行参数 3-6 作为整数,请执行以下操作:

weights = [int(arg) for arg in sys.argv[3:7]]

请注意,如果缺少 args,这不会像您那样抛出 IndexError。如果你需要这种行为,试试这个:

weights = [int(sys.argv[i]) for i in range(3, 7)]

如果您想要更好的 CL arg 解析,请查看 argparse


请记住,sys.argv 的元素是 字符串 ,如果您像 c for c in sys.argv[3] 那样遍历字符串,您会得到 characters*,这意味着如果你在命令行上给出一个 2 位数的权重,比如 14,它将被拆分成它的数字,14 .如果那是您真正想要的,请执行以下操作:

weights = [int(c) for i in range(3, 7) for c in sys.argv[i]]

* 技术上长度为 1

的字符串

您可以使用枚举。枚举是这样工作的:

a = ['a','b','c']
for i in enumerate(a):
     print(i)

#outputs
(0, 'a')
(1, 'b')
(2, 'c')

#This is the solution
[int(arg) for index,arg in enumerate(sys.argv) if index in range(3,7)]