如何检查子串在Python中的列表中是否多次出现?

时间:2017-01-18 23:05:10

标签: python string list

所以,让我说我正在玩Go Fish(这完全是我正在编码的btw),我想检查具有功能的对。有很多蛮力的方法可以做,但我认为可能的方式是我不确定如何执行是测试同一子串的多次出现。

示例:Player_hand = ['Ace of Spades', 'Nine of Diamonds', 'Ace of Diamonds']

现在我尝试使用if Player_hand.find('Ace')==2并且只测试整个字符串'Ace'

TLDR:我想检查一个子字符串是否在一个充满字符串的列表中多次出现。感谢您提前提供任何帮助!

编辑:此问题与此问题不重复

Finding multiple occurrences of a string within a string in Python

此问题显示如何在单个字符串中查找多个匹配项,以及如何在列表中查找整个字符串的多个匹配项。我希望在列表中找到多个字符串的子串。

2 个答案:

答案 0 :(得分:3)

您可以对列表中的每个字符串使用in

>>> player_hand = ['Ace of Spades', 'Nine of Diamonds', 'Ace of Diamonds']
>>> sum(1 for x in player_hand if 'Ace' in x)
2

如果1在列表的字符串中,则使用生成器表达式遍历列表,该列表为您提供Ace。总结这些内容可以得到包含Ace的字符串总数。

答案 1 :(得分:1)

这似乎是一个“X-Y”问题 - 你有一个更高级别的问题,但询问细节。

我建议您预先处理输入以删除未使用的详细信息。你有什么特别的理由关心西装吗?如果没有,请转储它们。如果是这样,请保留它们......但为了您的内部便利而对卡进行编码。例如,将上面的手表示为等级 - 套装对列表:

player_hand = ["AS", "9D", "AD"]

如果需要,您可以通过对列表进行排序来收集相同的卡片。如果没有,只需使用第一个元素上的计数功能查看您拥有的每个项目的数量。你可以做点什么

card_rank = "A23456789TJQK"
rank_count = [player_hand.count(char) for char in card_rank]

此外,如果你的下一个任务是编写一个更复杂的纸牌游戏,这很好地概括了。

这会让你感动吗?

每次评估更新

player_hand = ["AS", "9D", "AD"]
rank_hand = [card[0] for card in player_hand]
card_rank = "A23456789TJQK"
rank_count = [rank_hand.count(char) for char in card_rank]
print rank_count

输出:

[2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]