在列表中查找不常见的长度

时间:2016-04-27 02:00:36

标签: python

我需要找出哪些行长度不一样,但我的代码是说所有不像最常用词的行是一个不常见的长度,即使它们的长度确实相同。这是我的代码。

import collections


fle= ['hello', 'hello', 'hello','justi', 'hello','no', 'hello', 'no']


count= sum(1 for n in fle)
print count

most_common_length = collections.Counter(fle).most_common(1)[0][0]
print most_common_length

mcl = len(most_common_length)

uncommon = [n for n, v in enumerate(fle) if v != most_common_length]
print uncommon

4 个答案:

答案 0 :(得分:0)

在这一行

uncommon = [n for n, v in enumerate(fle) if v != most_common_length]

您实际上是在比较数组中的每个单词' hello'而不是将单词的长度与最常用单词的长度进行比较。它应该是

uncommon = [n for n, v in enumerate(fle) if len(v) != mcl]

然后输出将是[5,7],它告诉你索引5和7的单词有不常见的长度。

答案 1 :(得分:0)

most_common_length = collections.Counter(fle).most_common(1)[0][0]

您是误导性变量名称的受害者。 most_common_length根本就不是这样。它实际上是最常见的。请注意,len行中没有collections.Counter的来电。它不计算单词长度,而是计算单词。

修复此行并计算长度非常重要。不要试图通过计算结果的长度来解决不良搜索问题,这就是你使用mcl所做的事情。最常见单词的长度不一定与最常见的长度相同。

uncommon = [n for n, v in enumerate(fle) if v != most_common_length]

一旦你解决了,你会发现另一个问题。最后的比较将v与最常见的长度进行比较。它应该是len(v)。您想要将长度与长度进行比较。

答案 2 :(得分:0)

获取平均长度并打印低于平均值的

fle = ['hello', 'hello', 'hello','justi', 'hello','no', 'hello', 'no']
avg = sum([len(x) for x in fle])/len((fle))
print "The following items appear to have an uncommon length: {}".format(', '.join([x for x in fle if len(x) < avg]))

<强>输出:

The following items appear to have an uncommon length: no, no

答案 3 :(得分:0)

您必须比较长度而不是

中的值
uncommon = [n for n, v in enumerate(fle) if v != most_common_length]

您也可以使用过滤器

uncommon = list( filter( lambda x:len(x) != most_common_length, fle) )