【问题标题】:How do I check whether or not a substring appears multiple times within a list in Python? [duplicate]如何检查子字符串是否在 Python 列表中多次出现? [复制]
【发布时间】:2017-06-03 12:25:12
【问题描述】:

假设我正在玩 Go Fish(这完全是我正在编写的代码),并且我想使用函数检查配对。有很多蛮力方法可以完成,但我认为可能我不确定如何执行的方法是测试同一子字符串的多次出现。

示例: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

这个问题展示了如何在单个字符串中查找多次出现,以及如何在列表中查找整个字符串的多次出现。我希望在一个完整的字符串列表中找到多次出现的子字符串。

【问题讨论】:

  • 哇,这里的社区很棒,反应真快。我不认为它实际上是重复的。 .find 用法被解释为对此的回答,它可以在单个字符串或字符串列表中使用(如果它在该列表中查找整个字符串之一)。但我正在寻找一个充满字符串的列表中子字符串的多次迭代。

标签: python string list


【解决方案1】:

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

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

如果Ace 在列表的字符串中,这将使用生成器表达式遍历列表,该列表为您提供1。将这些加起来可以得出包含Ace 的字符串总数。

【讨论】:

  • 这确实回答了我的问题,但下面 Prune 的回答也是一个完全有效的答案。非常感谢。
【解决方案2】:

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

我建议您对输入进行预处理以去除未使用的详细信息。你有什么特别的理由关心西装吗?如果没有,请丢弃它们。如果是这样,请保留它们……但为了内部方便,请对卡片进行编码。例如,将上述手牌表示为一系列等级套装:

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

如果需要,您可以通过对列表进行排序来收集类似的卡片。如果没有,只需对第一个元素使用 count 函数即可查看您拥有的每个项目的数量。你可以做类似的事情

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

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

这会让你感动吗?

根据 OP 评论更新

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]

【讨论】:

  • 嗯,我想我需要西装。既可以在玩家查看手牌时显示给玩家(用户友好性),也可以区分不同的牌。列表中不能只有四个名为“Ace”的字符串吗?所以我用了西装。我也不确定您的答案是什么;您介意显示 rank_count 的输出吗?不知道我如何在没有字典的情况下使用它。也许我不知道我在说什么。
  • 确实知道你在做什么。字典是您的内部符号和外部显示之间的一个很好的翻译设备。即使您不将其简化为我的两个字母形式,我也建议您将卡片分成等级套装对;打印时重新插入“of”。
  • 太棒了,非常感谢。有没有办法让它检查这样的词?我真的想保持 Player_hand 的格式等级为西装,以避免有另一个变量,这样做你可以从一个类似于你的 rank_hand 的列表中提取,但是如果完整的单词会在第一个位置输出 2 “王牌”出现了两次?也感谢您的信任投票:)
  • 是的,它同样适用于文字。在 Python 中,这些单独的字母是长度为 1 的简单单词。继续——用单词来代替。您可以在原始版本的 player_hand 上使用 " of ".split(player_hand[i]) 进行转换——即使用 " of " 作为分隔符。
猜你喜欢
  • 2015-03-03
  • 2019-07-14
  • 1970-01-01
  • 2015-05-31
  • 2015-05-05
  • 2011-12-28
  • 2015-06-04
  • 2013-04-29
  • 1970-01-01
相关资源
最近更新 更多