繁体   English   中英

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

[英]how to remove multiple duplicates from a 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 =俱乐部

在这个游戏中,玩家每张前TS TD JH QS QC AC AD AH将获得8张牌

我的代码导致此JH QS QC AC AD AH我希望它导致此JH AH

先感谢您

如果顺序无关紧要,请使用set()或dict()代替。 否则,您必须遍历整个列表并从列表中删除项目。 或者,您可以维护有序列表,并通过第二个字典来跟踪列表中的唯一项。 在将新项目插入列表之前,您首先要检查该项目是否已存在于字典旁边-这对于大型列表是可取的-对于小型列表而言可能会过大。

您可以调用该函数,一次又一次地删除一个重复对象,直到没有重复对象为止。

因此,正如我所看到的,西装的搭配并不重要。 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
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM