2017-01-18 98 views
1

所以我們可以說我正在玩Go Fish(這就是我編碼的順序),我想檢查一個函數對。有很多蠻力的方式可以完成,但我認爲可能的方式,我不知道如何執行是測試相同子字符串的多次出現。如何檢查一個子串是否在Python的列表中多次出現?

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

這個問題顯示瞭如何將一個字符串中找到多次發生,以及如何找到內的整個字符串多次出現名單。我正在尋找在一個充滿字符串的列表中找到多個子字符串。

+0

哇社會上這裏是偉大的,有什麼快速響應。我不認爲這實際上是重複的。 .find的用法被解釋爲對這個問題的答案,它可以在單個字符串或者字符串列表中使用(如果它在該列表中尋找整個字符串中的一個)。但是我正在尋找一個充滿字符串的列表中的多個子字符串迭代。 – Bear99

回答

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的字符串總數。

+0

這確實回答了我的問題,但下面的Prune的答案也是一個完全有效的答案。非常感謝。 – Bear99

1

這似乎是一個「X-Y」問題 - 您有更高級別的問題,但詢問有關細節。

我建議您預處理您的輸入以擺脫未使用的細節。你有什麼特別的理由關心西裝嗎?如果沒有,請轉儲它們。如果是這樣,請保留它們......但是爲了您的內部便利而編碼。例如,代表上述的手,等級,花色對的列表:

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

如果需要的話,可以通過列表進行排序,聚集樣卡。如果不是,只需使用第一個元素上的計數函數來查看您擁有的每件物品的數量。你可以做類似

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

此外,如果你的下一個任務是編程一個更復雜的紙牌遊戲,這個概括很好。

這讓你感動嗎?

UPDATE每個操作COMMENT

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] 
+0

嗯,我想我需要西裝。當他看着他的手(用戶友好)並且區分不同的牌時顯示給玩家。在列表中不能只有四個名爲'Ace'的字符串嗎?所以我使用西裝。我也不確定你的答案需要什麼;你介意顯示rank_count的輸出嗎?不知道我可以如何使用這個或者沒有字典。也許我不知道我在說什麼。 – Bear99

+0

你*知道你在做什麼。字典是內部符號和外部顯示之間的很好的翻譯工具。即使你不把它分解成我的兩個字母的形式,我建議你將這些卡片分成兩組,當您打印時重新插入「of」。 – Prune

+0

太棒了,非常感謝。有沒有辦法讓它檢查這樣的文字?我真的想保持Player_hand的格式等級爲了避免有另一個變量,並且這樣做可以從類似於你的rank_hand的列表中拉出,但是如果整個單詞是在第一個點上輸出2的話'Ace'出現兩次了?感謝您的信任投票:) – Bear99

相關問題