我想使用第一个列表的项目和第二个列表的索引在两个列表之间进行比较,并且每个匹配的新列表将从第二个列表追加。
a = [[1],[0],[0]]
b = [[1,2],[3,4],[5,6]]
c = []
for item in a:
for i in range(len(b)):
if item == b[i]:
c.append(b[i])
答案应该是这样的:
c = [[3,4],[1,2],[1,2]]
您的算法几乎是正确的。问题出在if语句上。如果您尝试打印item
并b[i]
在进行相等性测试之前发现问题。
>>> a = [[1],[0],[0]]
>>> b = [[1,2],[3,4],[5,6]]
>>> c = []
>>> for item in a:
>>> for i in range(len(b)):
>>> print("item == b[i] is {} == {} is {}".format(item, b[i],
item == b[i]))
>>> if item == b[i]:
>>> c.append(b[i])
item == b[i] is [1] == [1, 2] is False
item == b[i] is [1] == [3, 4] is False
item == b[i] is [1] == [5, 6] is False
item == b[i] is [0] == [1, 2] is False
item == b[i] is [0] == [3, 4] is False
item == b[i] is [0] == [5, 6] is False
item == b[i] is [0] == [1, 2] is False
item == b[i] is [0] == [3, 4] is False
item == b[i] is [0] == [5, 6] is False
你已经基本上被检查每个元素a
和b
平等。而是要检查a
索引中每个项的元素是否相等b
。
例如。
for item_a in a:
for index_b, item_b in enumerate(b):
# only check index 0 of item_a as all lists are of length one.
print("item_a[0] == index_b is {} == {} is {}".format(item_a[0],
index_b, item_a[0] == index_b))
if item_a[0] == index_b:
c.append(item_b)
产生:
item_a[0] == index_b is 1 == 0 is False
item_a[0] == index_b is 1 == 1 is True
item_a[0] == index_b is 1 == 2 is False
item_a[0] == index_b is 0 == 0 is True
item_a[0] == index_b is 0 == 1 is False
item_a[0] == index_b is 0 == 2 is False
item_a[0] == index_b is 0 == 0 is True
item_a[0] == index_b is 0 == 1 is False
item_a[0] == index_b is 0 == 2 is False
enumerate
是一个内置的辅助函数,该函数返回一个元组,其中包含列表(或可迭代的任何元素)中每个元素的索引和元素。
除非您需要,否则我也建议扁平化,a
因为这里有嵌套列表是多余的。a = [1, 0, 0]
。
综上所述,如果您能够掌握列表理解的知识,那么编码解决方案就会简单得多-正如您对问题的其他回答所证明的那样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句