具有多个 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
,它将被拆分成它的数字,1
和 4
.如果那是您真正想要的,请执行以下操作:
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)]
我尝试通过阅读 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
,它将被拆分成它的数字,1
和 4
.如果那是您真正想要的,请执行以下操作:
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)]