我有列表种子和水蛭,使用len()
在请求长度上返回19
使用这两个列表是一个列表理解 -
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每个元素应该是种子和水蛭之间的差异(这些是字符串,因此必须进行类型转换)
但len(sldiff)
返回361!
我的问题是 - 为什么会发生这种情况,我该怎么做以获得所需的sldiff列表?
答案 0 :(得分:3)
你正在进行双重列表理解 - 即你在'leechs'中为每个条目迭代整个'种子'(所以19 * 19,即361)。
看起来你真正想要做的就是遍历一个列表,每个列表都是来自种子的相关条目和来自水蛭的条目的组合。这就是zip
的作用:
[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)]
答案 1 :(得分:2)
[(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)]
答案 2 :(得分:1)
由于两个for循环,你得到19 * 19 = 361的结果。
我不确定你想要什么,但可能是这样的:
sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))]
假设len(种子)== len(leechs)