如何使用python识别项目列表中的奇数项目

时间:2013-09-22 20:09:29

标签: python

我的目标是识别下面列表中的奇数元素。

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

奇数项目为tasksb2,其他四项均位于taska

它们都具有相同的长度,因此使用len函数进行区分将不起作用。 有任何想法吗?感谢。

3 个答案:

答案 0 :(得分: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 :(得分:1)

似乎是按字母顺序排序的简单问题。

print sorted(list_1)[-1]

不想排序?尝试O(1)空间复杂度的O(n)时间复杂度解决方案:

print max(list_1)

答案 2 :(得分: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得分最低!