我正在比较两个列表。 A 和 B。 嗨A,你好吗?我没事,B。如果A 项出现在列表B 中,则应将其从列表A 中删除。比较是 RGB 颜色列表。
只是它超出了范围,我不知道为什么,因为我正在反向循环列表。
data = [
[224, 96, 96],
[128, 32, 192], # match
[192, 32, 160], # match
]
myColours = [
[207, 30, 30],
[207,159, 30],
[ 79,207, 30],
[ 32, 64, 192],
[128, 32, 192],
[192, 32, 160],
]
for x in list(range(len(data)-1, -1, -1)):
for y in range(0, len(myColours)):
if myColours[y] == data[x]:
print (data[x])
data.remove(data[x]) # list index out of range
列表数据应该以
结尾data = [
[224, 96, 96]
]
数据将由代码生成,myColours 由手工生成。它们的顺序并不重要,重要的是值。
答案 0 :(得分:1)
代码可以是:
data = [
[224, 96, 96],
[128, 32, 192],
[192, 32, 160],
]
myColours = [
[207, 30, 30],
[207,159, 30],
[ 79,207, 30],
[ 32, 64, 192],
[128, 32, 192],
[192, 32, 160],
]
l=len(myColours)
for i in range(0,l):
for x in data:
if x in myColours:
data.remove(x)
print(data)
运行我写的代码后,输出如下:
[[224, 96, 96]]
答案 1 :(得分:1)
使用列表理解:
data = [
[224, 96, 96],
[128, 32, 192], # match
[192, 32, 160], # match
]
myColours = [
[207, 30, 30],
[207,159, 30],
[ 79,207, 30],
[ 32, 64, 192],
[128, 32, 192],
[192, 32, 160],
]
data = [item for item in data if item not in myColours]
#to iterate backwards:
#data = [item for item in reversed(data) if item not in myColours]
答案 2 :(得分:1)
有两种方法可以解决您的问题:
首先:
data = [
[224, 96, 96],
[128, 32, 192],
[192, 32, 160],
]
myColours = [
[207, 30, 30],
[207, 159, 30],
[79, 207, 30],
[32, 64, 192],
[128, 32, 192],
[192, 32, 160],
]
a = 0
x = len(data)
while a < len(data):
for i in myColours:
if data[a] == i:
del(data[a])
a = 0
break
if a < len(data):
a += 1
print(data)
第二个:
data = [
[224, 96, 96],
[128, 32, 192],
[192, 32, 160],
]
myColours = [
[207, 30, 30],
[207, 159, 30],
[79, 207, 30],
[32, 64, 192],
[128, 32, 192],
[192, 32, 160],
]
data2 = data.copy()
x = 0
for i in range(len(data)):
for i2 in myColours:
if data[i] == i2:
del(data2[i-x])
x += 1
break
print(data2)
还有一种方法可以使用分支,但不是完美的方法。