假設我有一個名爲support
功能,計數的次數通過項目出現在列表中的元素:將字符串轉換爲不包含單個字符的元素?
>>> rows = ['candy apple banana cookie', 'candy apple banana', 'candy', 'apple', 'apple banana candy', 'candy apple', 'banana']
>>> def support(item, rows):
return float(sum([1 for row in rows if item in row]))
>>> print(support('apple', rows))
5.0
行之有效,但最終我需要衡量項目發生頻率一起在數據中。我可以這樣定義:
>>> def joint_support(items, rows):
return float(sum([1 for row in rows if all(item in row.split() for item in items)]))
我寧可不定義兩個函數有效地做同樣的事情。無論用戶是否在items
中傳遞了一個或兩個元素,我都希望函數能夠統計或分開計算這些項目在數據中的出現次數。不使用if
語句來衡量items
長度(即使用列表理解),我怎麼能保證的是,如果items
參數只是一個字符串,該函數不搜索每個單獨的字母關節發生?
這是我到目前爲止有:
>>> def master_support(items, rows):
return float(sum([1 for row in rows if all(item in row.split() for item in items if type(items) is not str) else 1 if items in row.split()]))
實際上,我覺得我問我怎麼可以自動轉換到str
不list
名單是單個字符的元素。
這不會通過測試用例'joint_support('apple',rows)',它應該返回'5'。我認爲這是因爲第一個'set'語句將''apple''變成'{'p','a','e','l'}'。 – blacksite
@ GBR24您必須將第一個參數設置爲包含一個元素的列表。我已更新我的帖子。 – nauer
我知道,但我寧願只是通過'str',例如「apple」與「list」,例如'['apple']' – blacksite