我的目标是找出下面列表中的奇数元素。
list_1=['taska1', 'taska2', 'taska3', 'taskb2', 'taska7']
奇数项tasksb2
与其他四项相同taska
。
它们都具有相同的长度,因此无法使用 len 函数进行区分。有任何想法吗?谢谢。
我的目标是找出下面列表中的奇数元素。
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']
似乎是一个通过字母排序解决的简单问题。
print sorted(list_1)[-1]
不想排序?尝试具有 O(1) 空间复杂度的 O(n) 时间复杂度解:
print max(list_1)
如果您知道项目的基本结构是什么,那就很容易了。
如果您事先不知道项目的结构,一种方法是根据项目之间的相似性对项目进行评分。将此问题中的信息用于标准库模块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的分数最低!