Python 在两个列表上循环使用条件

Python 在两个列表上循环使用条件,python,python-3.5,Python,Python 3.5,假设我有两个列表,我想从这两个列表中创建第三个列表,其中包含第一个列表中的元素元组。本质上,我的代码如下所示: a = [3,6,7,8,12,89,289] b = [28,91,2489] _max = 39 c = [] 我想迭代列表,这样,如果列表a中的一个元素小于列表b中的一个元素,那么列表b的项-列表a的项编辑:由于您原始问题的措辞相当不清楚,我假设您想将列表a中的每个元素与列表b中的每个元素进行比较。正如评论中所指出的,这种组合称为笛卡尔积。如果这样一个元组满足您的条件,您希望

假设我有两个列表,我想从这两个列表中创建第三个列表,其中包含第一个列表中的元素元组。本质上,我的代码如下所示:

a = [3,6,7,8,12,89,289] 
b = [28,91,2489]
_max = 39
c = []

我想迭代列表,这样,如果列表a中的一个元素小于列表b中的一个元素,那么列表b的项-列表a的项编辑:由于您原始问题的措辞相当不清楚,我假设您想将列表a中的每个元素与列表b中的每个元素进行比较。正如评论中所指出的,这种组合称为笛卡尔积。如果这样一个元组满足您的条件,您希望将其添加到列表c中

您可以使用具有以下条件的列表理解来构建列表c:

a = [3,6,7,8,12,89,289] 
b = [28,91,2489]

max_value = 39

c=[(item_a, item_b) for item_a in a for item_b in b if (item_a<item_b and item_b-item_a<=max_value)]

另外:请不要将max等内部名称用作变量名。

我认为您不需要zip函数;这只会查看pairs元素_a,元素_b,其中元素_a来自列表a,元素_b来自列表b,并且这两个元素在列表中具有相同的索引

相反,您需要迭代所有对元素a,元素b,其中元素a来自列表a,元素b来自列表b

这称为列表a和列表b的笛卡尔积

这有一个模块和许多相关的迭代——itertools

特别是你想要的

from itertools import product
product(a, b)
当你反复讨论这个问题时,你应该使用理解,而不是通过附加来构建答案。

itertolols.product如何


您的列表a和列表b的长度不同。是否要将第一个元素与第一个元素匹配,第二个元素与第二个元素匹配,依此类推?或者您想将列表a中的所有内容与列表b中的所有内容进行匹配吗?因此,如果我们理解正确,您希望循环a和b中的所有元素对:笛卡尔积。显示预期输出。我想创建第三个列表,其中将包含第一个列表中的元素元组。这两者之间的关系不可理解语句和对列表的描述我想迭代列表,这样如果列表a中的一个元素小于列表b中的一个元素,那么列表b的项-列表a的项@J.Doe将其放入问题中。建议使用itertools.producta中的项a,项b,b.你如何回答在需求或问题描述中模棱两可的问题?@nbro这就是我理解他的问题的方式。它确实不是第一个列表中的元素元组,但我认为这就是他的意思。我将编辑我的答案以澄清我的假设。我建议使用absi[1]-I[0]@KHELILIHamza。我认为你的表达并不等同,因为2,1将被接受,尽管2
from itertools import product
product(a, b)
[i for i in list(itertools.product(a,b)) if abs(i[1]-i[0])<=max_value]