我有列表种子和水蛭,使用 len() 在询问长度时返回 19
并且使用这两个列表是列表理解 -
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每个元素都应该是种子和水蛭之间的区别(它们是字符串,所以必须进行类型转换)
但len(sldiff)
返回 361!
我的问题是 - 为什么会发生这种情况,我应该怎么做才能获得所需的 sldiff 列表?
我有列表种子和水蛭,使用 len() 在询问长度时返回 19
并且使用这两个列表是列表理解 -
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每个元素都应该是种子和水蛭之间的区别(它们是字符串,所以必须进行类型转换)
但len(sldiff)
返回 361!
我的问题是 - 为什么会发生这种情况,我应该怎么做才能获得所需的 sldiff 列表?
你正在做一个双重列表理解 - 即你正在为'水蛭'中的每个条目迭代整个'种子'(所以19 * 19,即361)。
似乎您真正想要做的是遍历一个列表,其中的每个条目都是来自种子的相关条目和来自水蛭的条目的组合。这就是zip
:
[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)]
[(int(seed)-int(leech)) for seed in seeds for leech in leechs]
类似于:
temp = []
for seed in seeds:
for leech in leechs:
temp.append(int(seed)-int(leech))
显然它是 19 * 19。
我想你想要
[int(x)-int(y) for x, y in zip(seeds, leechs)]
由于两个 for 循环,您得到 19 * 19 = 361 的结果。
我不确定你想要什么,但可能是这样的:
sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))]
假设 len(seeds) == len(leechs)