我有列表种子和leechs这对要求使用LEN()
长度 而使用这两个名单回19是一个列表理解 -列表理解错误的长度
sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs]
每个元素应该是种子和水蛭之间的区别(它们是字符串,因此必须被模拟)
但是len(sldiff)
返回361!
我的问题是 - 为什么会发生,我该怎么做才能获得所需的sldiff列表?
我有列表种子和leechs这对要求使用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)]
OP在做什么被称为笛卡尔产品。 –
谢谢。我会在大约11分钟内将您的答案标记为正确。 – svineet
[(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)]
你得到19 * 19 =的结果361因为两个for循环。
我不清楚自己想要什么,但很可能是这样的:
sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))]
假设LEN(种子)== LEN(leechs)
19 * 19 = 361是一个很好的起点 – keyser