我的目標是確定下面列表中的奇數元素。如何使用python標識項目列表中的奇數項目
list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7']
奇數產品tasksb2
作爲其他四個項目taska
下。
它們都具有相同的長度,因此使用len函數進行區分將不起作用。 任何想法?謝謝。
我的目標是確定下面列表中的奇數元素。如何使用python標識項目列表中的奇數項目
list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7']
奇數產品tasksb2
作爲其他四個項目taska
下。
它們都具有相同的長度,因此使用len函數進行區分將不起作用。 任何想法?謝謝。
如果你只是想找到一種不與「TASKA」啓動項,那麼你可以使用下面的list comprehension
:
>>> list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7']
>>> print [l for l in list_1 if not l.startswith('taska')]
['taskb2']
另一種選擇是使用filter
+ lambda
:
>>> filter(lambda l: not l.startswith('taska'), list_1)
['taskb2']
嗨,明宇,感謝您的解答。它工作完美。 – Tiger1
似乎是一個簡單的問題通過字母排序解決。
print sorted(list_1)[-1]
不想排序?嘗試爲O(n)與O(1)空間複雜度時間複雜度的解決方案:
print max(list_1)
非常感謝您的解決方案。 – Tiger1
如果您知道項目的基本結構是什麼,那麼它很容易。
如果您事先不知道您的物品的結構,一種方法是根據它們的相似性對物品進行評分。從this問題使用信息的標準庫模塊difflib,
import difflib
import itertools
list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7']
# Initialize a dict, keyed on the items, with 0.0 score to start
score = dict.fromkeys(list_1, 0.0)
# Arrange the items in pairs with each other
for w1, w2 in itertools.combinations(list_1, 2):
# Performs the matching function - see difflib docs
seq=difflib.SequenceMatcher(a=w1, b=w2)
# increment the "match" score for each
score[w1]+=seq.ratio()
score[w2]+=seq.ratio()
# Print the results
>>> score
{'taska1': 3.166666666666667,
'taska2': 3.3333333333333335,
'taska3': 3.166666666666667,
'taska7': 3.1666666666666665,
'taskb2': 2.833333333333333}
事實證明,taskb2具有最低得分!
我猜這是包含'b'的那個?儘管如此,你期望有什麼人能夠在這裏提供幫助?沒有任何代碼存在問題,並且關於正確識別奇數項的邏輯是任何可以適當定義它的邏輯...... –
您的目標是識別_that_列表中或任何列表中的奇怪元素嗎?它們是完全不同的問題,需要「奇怪」的不同定義。對於_that_列表,只需找到倒數第二個字符爲'b'的那個... – Ben
我給出的列表僅僅是一個示例,實際問題是一個長長的複雜列表。 – Tiger1