2013-09-22 50 views
0

我的目標是確定下面列表中的奇數元素。如何使用python標識項目列表中的奇數項目

list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7'] 

奇數產品tasksb2作爲其他四個項目taska下。

它們都具有相同的長度,因此使用len函數進行區分將不起作用。 任何想法?謝謝。

+3

我猜這是包含'b'的那個?儘管如此,你期望有什麼人能夠在這裏提供幫助?沒有任何代碼存在問題,並且關於正確識別奇數項的邏輯是任何可以適當定義它的邏輯...... –

+0

您的目標是識別_that_列表中或任何列表中的奇怪元素嗎?它們是完全不同的問題,需要「奇怪」的不同定義。對於_that_列表,只需找到倒數第二個字符爲'b'的那個... – Ben

+0

我給出的列表僅僅是一個示例,實際問題是一個長長的複雜列表。 – Tiger1

回答

3

如果你只是想找到一種不與「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'] 
+1

嗨,明宇,感謝您的解答。它工作完美。 – Tiger1

1

似乎是一個簡單的問題通過字母排序解決。

print sorted(list_1)[-1] 

不想排序?嘗試爲O(n)與O(1)空間複雜度時間複雜度的解決方案:

print max(list_1) 
+1

非常感謝您的解決方案。 – Tiger1

0

如果您知道項目的基本結構是什麼,那麼它很容易。

如果您事先不知道您的物品的結構,一種方法是根據它們的相似性對物品進行評分。從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具有最低得分!

相關問題