如何从列表中删除多个重复项?

时间:2011-03-30 03:35:34

标签: python list

我正在尝试编写一个程序,在两个玩家之间进行游戏 我目前仍然试图删除第一手处理的副本。

这是我到目前为止的代码,它只删除了一个欺骗。我想知道是否有人可以通过允许删除所有欺骗来帮助我增强它

#sorts player1 cards and removes the pairs
player1.sort()
print "hand for player 1:"
print cards.hand_string(player1)
newplayer1 = []
player1points = 0

newplayer1, player1points = cards.drop_pair(player1)
print cards.hand_string(newplayer1)

S =黑桃 d =钻石 H =心 C =俱乐部

对于这个游戏,玩家每人将获得8张牌 TS TD JH QS QC AC AD AH

我的代码导致了这一点 JH QS QC AC AD AH 我想要它导致这个 JH AH

提前谢谢

5 个答案:

答案 0 :(得分:2)

如果排序无关紧要:请改用set()或dict()。否则,您必须遍历整个列表并从列表中删除项目。或者您维护有序列表并通过第二个字典跟踪列表中的唯一项目。在将新项目插入列表之前,首先检查该项目是否已经存在于dict的一侧 - 这对于大型列表是可行的 - 对于小型列表而言,这是一种过度杀伤力。

答案 1 :(得分:1)

答案 2 :(得分:0)

您可以调用该功能一次又一次地移除一个欺骗,直到没有留下任何欺骗。

答案 3 :(得分:0)

因此,在我看来,套装在匹配方面并不重要。 unique_hand_values = [手中的h [h [0]]获取所有卡值的列表(没有套装)。

从那里你可以循环和比较,因为它们按顺序排序:

for index, hand_value in enumerate(unique_hand_values): 
    if index + 1 < len(hand_value) and hand_value == unique_hand_values[index + 1]:
        # its a duplicate

答案 4 :(得分:0)

from itertools import groupby
from operator import itemgetter

player1 = ['TS', 'TD', 'JH', 'QS', 'QC', 'AC', 'AD', 'AH']
new_player1 = []

groups = groupby(player1, key=itemgetter(0))
for key, group in groups:
    group = list(group)
    if len(group)%2:
        new_player1.append(group[-1])

print new_player1