我正在嘗試構建一個函數,它可以在不導入庫/包的情況下獲取python列表中的等值線數。我可以用一個單獨的字符串來完成此操作,但在列表格式中很難這樣做。獲取Python列表中的等值線圖的數量
列表會像這樣:
l =['please', 'find', 'isograms', 'if', 'you', 'can']
函數應該返回4號,因爲琴絃的4不必重複字符。任何幫助將不勝感激。
我正在嘗試構建一個函數,它可以在不導入庫/包的情況下獲取python列表中的等值線數。我可以用一個單獨的字符串來完成此操作,但在列表格式中很難這樣做。獲取Python列表中的等值線圖的數量
列表會像這樣:
l =['please', 'find', 'isograms', 'if', 'you', 'can']
函數應該返回4號,因爲琴絃的4不必重複字符。任何幫助將不勝感激。
只需使用以下:
[len({}.fromkeys(x)) == len(x) for x in l].count(True)
或
[len(set(x)) == len(x) for x in l].count(True)
>>> l =['please', 'find', 'isograms', 'if', 'you', 'can']
>>> [len({}.fromkeys(x)) == len(x) for x in l].count(True)
4
>>> [len(set(x)) == len(x) for x in l].count(True)
4
這通過每個字符串轉換爲一個字典,從而消除了重複,並檢查長度是等於原始長度。然後它計算列表中True
值的數量。
或者你可以使用'set'。仍然+1 –
@ t.m.adam真,無論是工作,將添加:) –
您在問題中聲明您可以確定單個字符串是否爲等值線圖。我假設這意味着您已經有一個函數is_isogram(string)
,如果string
是等值線,則返回True
,否則返回False
。
如果是這樣,嘗試:
count = sum(is_isogram(s) for s in l)
的sum
函數內部生成器表達式基本上只是計算的is_isogram
每個項目在l
的值(一個或True
False
值)。 sum
函數然後隱式地將這些布爾值轉換爲它們的整數等效值(即1
對於True
和0
對於False
),並且計算總和。由於列表中每個等值線圖應該有一個1
,因此總和應該等於等值線圖的數量。
如果不是一個功能必須用於測試等值線圖(例如len(set(string)) == len(string)
)的一些表達,然後簡單地代替is_isogram(string)
的替代在上面的代碼,例如:
count = sum((len(set(s)) == len(s)) for s in l)
len([word for word in l if len(word) == len(set(word))])
(其中部分len(word) == len(set(word))
意味着只包含不重複字符的單詞,因爲在set(word)
不包含重複項)。
你可以發佈你用單數字符串完成的任務嗎? –
*「我可以用一個單獨的字符串來完成此操作」* - 然後,只需將其放入一個循環並計數即可。 –
歡迎來到SO。請閱讀[how-to-ask](http://stackoverflow.com/help/how-to-ask)以提供足夠的具體信息來描述您的問題。 – thewaywewere