如何在新行中打印列表中的元素?

时间:2012-10-23 00:31:45

标签: python list tuples dictionary

我有一个清单

L = Counter(mywords)

其中

mywords = ['Well', 'Jim', 'opportunity', 'I', 'Governor', 'University', 'Denver', 'hospitality', 'There', 'lot', 'points', 'I', 'make', 'tonight', 'important', '20', 'years', 'ago', 'I', 'luckiest', 'man', 'earth', 'Michelle', 'agreed', 'marry', '(Laughter)', 'And', 'I', 'Sweetie', 'happy'] 

它比这长得多,但这只是一个片段。

现在我接下来要做的是:

print ("\n".join(c.most_common(10)))

因为我希望它显示该列表中10个最常用的单词及其计数,但我希望它打印到列表中每个项目的新行,而是我收到此错误:

TypeError: sequence item 0: expected str instance, tuple found

使用Python 3可以获得任何帮助。

4 个答案:

答案 0 :(得分:4)

print ("\n".join(map(str, c.most_common(10))))

如果您想要更多地控制格式,可以使用像这样的格式字符串

print ("\n".join("{}: {}".format(k,v) for k,v in c.most_common(10)))

答案 1 :(得分:1)

最简单的是:

for item, freq in L.most_common(10):
    print(item, 'has a count of', freq) # or
    print('there are {} occurrences of "{}"'.format(freq, item))

答案 2 :(得分:1)

如果你只想要字符串:

print("\n".join(element for element, count in c.most_common(10)))

如果您希望以('foo', 11)形式打印字符串和计数:

print ("\n".join(str(element_and_count) 
       for element_and_count in c.most_common(10)))

如果您想要字符串并以您选择的其他格式计数:

print ("\n".join("{}: {}".format(element, count) 
       for element, count in c.most_common(10)))

为什么呢? most_common函数返回(element, count)对。那些东西是元组,而不是字符串。你不能只是一起加入元组。当然,您可以将其转换为字符串(上面的选项#2),但只有在您确实希望每行格式为('foo', 11)时才有效。要获得其他两个选项,您需要忽略一半的元组并使用另一个,或者编写自己的格式表达式。

在任何情况下,您都希望对most_common返回的序列的每个成员执行某些操作。 Pythonic的方法是使用列表推导或生成器表达式。

同时,您应该学习如何调试这些案例。当join为您提供TypeError时,请将其分解为多个,直到您找到存储工作的那个(并尝试使用2而不是10,这样就可以了解更少):

>>> print("\n".join(c.most_common(2)))
TypeError: sequence item 0: expected str instance, tuple found
>>> c.most_common(2)
[('I', 4), ('man', 1)]

啊哈!列表中的每个东西都是两个元组的元组,而不仅仅是一个字符串。为什么呢?

>>> help(c.most_common)
most_common(self, n=None) method of collections.Counter instance
    List the n most common elements and their counts from the most
    common to the least.  If n is None, then list all element counts.

    >>> Counter('abcdeabcdabcaba').most_common(3)
    [('a', 5), ('b', 4), ('c', 3)]

好的,所以它返回最常见的元素及其计数。我只想要这些元素。所以:

>>> [element for element, count in c.most_common(2)]
['I', 'man']

现在我可以加入:

>>> '\n'.join([element for element, count in c.most_common(2)])
'I\nman'

我不需要括号和父母(我只能使用表达而不是列表理解):

>>> '\n'.join(element for element, count in c.most_common(2))
'I\nman'

现在,我可以打印出来了:

>>> print('\n'.join(element for element, count in c.most_common(2)))
I
man

现在它正在工作,打印所有10:

>>> print('\n'.join(element for element, count in c.most_common(10)))

答案 3 :(得分:1)

我很惊讶没有人建议使用解包操作符*,因为你说python3所以为什么不执行以下操作,你可以test it here too

print(*[x[0]for x in L.most_common(10)], sep="\n")

相关问题