你的算法几乎正确。问题出在 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):
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]
。
话虽如此,如果你能理解列表推导式,编写一个解决方案会更简单——正如其他回答你问题的人所证明的那样。