我需要找出哪些行长度不一样,但我的代码是说所有不像最常用词的行是一个不常见的长度,即使它们的长度确实相同。这是我的代码。
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
答案 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) )