你的算法是正确的差不多。问题在于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
是一个内置的辅助函数返回包含在列表中(或任何可迭代是)的每个元素的索引和元素的元组。
除非你需要,我还建议flattening a
作为嵌套列表在这里是多余的,即。 a = [1, 0, 0]
。说完这一切之后,如果你可以让自己的头脑清楚理解,那么对解决方案进行编码会简单得多 - 正如你的问题的其他答案所证明的那样。
请问你的代码的工作? –
代码返回空列表 – Moj
不,它不起作用,它返回[] – user3748972