好的,我有两个清单:
x = [1, 2, 3, 4]
y = [1, 1, 2, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我以这种方式比较它们,所以我得到以下输出:
x = [3, 4]
y = [1, 5, 6]
Run Code Online (Sandbox Code Playgroud)
基本的想法是浏览每个列表并进行比较.如果他们有一个共同的元素删除该元素.但只有一个元素不是全部.如果他们没有共同的元素就离开它.两个相同的列表将变为x = [],y = []
这是我相当黑客和相当蹩脚的解决方案.我希望其他人可以推荐更好的和/或更多的pythonic方式来做到这一点.3个循环似乎过多......
done = True
while not done:
done = False
for x in xlist:
for y in ylist:
if x == y:
xlist.remove(x)
ylist.remove(y)
done = False
print xlist, ylist
Run Code Online (Sandbox Code Playgroud)
一如既往地感谢您花时间阅读这个问题.XOXO
您正在寻找的数据结构可能是多集(或"包"),如果是这样,在Python中实现它的一种好方法是使用collections.Counter:
>>> from collections import Counter
>>> x = Counter([1, 2, 3, 4])
>>> y = Counter([1, 1, 2, 5, 6])
>>> x - y
Counter({3: 1, 4: 1})
>>> y - x
Counter({1: 1, 5: 1, 6: 1})
Run Code Online (Sandbox Code Playgroud)
如果要将Counter对象转换回具有多重性的列表,可以使用以下elements方法:
>>> list((x - y).elements())
[3, 4]
>>> list((y - x).elements())
[1, 5, 6]
Run Code Online (Sandbox Code Playgroud)