Reb*_*oel 2 python indexing tuples python-2.7
fhand = open(raw_input('Enter a file name: '))
counts = dict()
words = []
for lines in fhand:
if lines.startswith('From') and not lines.startswith('From:'):
words = lines.split()
if words[1] not in counts:
counts[words[1]] = 1
else:
counts[words[1]] += 1
lst = list()
for key, val in counts.items():
lst.append((val, key))
lst.sort(reverse=True)
for key, val in lst[0]:
print key, val
Run Code Online (Sandbox Code Playgroud)
有问题的部分是:
for key, val in lst[0]:
print key, val
Run Code Online (Sandbox Code Playgroud)
这给了我:TypeError:'int'对象不可迭代.我已经发现,由于某种原因,这确实有效:
输入:
for key, val in lst[:1]:
print key, val
Run Code Online (Sandbox Code Playgroud)
输出:
Enter a file name: mbox-short.txt
5 cwen@iupui.edu
Run Code Online (Sandbox Code Playgroud)
我只想弄清楚为什么这个有效但不是[0].和往常一样,谢谢你的帮助!
你必须认识之间的差异[0]和[:1]
什么[0]是返回存储在列表的索引0处的值.
另一方面,当你这样做时[:1],你正在切割列表,这意味着你得到的列表中的所有元素的索引从0(含)到1(不包括).
从文档:
所有切片操作都返回包含所请求元素的新列表.
因此,当您对列表进行切片时,您也会返回列表.作为可迭代类型的列表可以被重复使用!即使它们只包含一个元素,也是如此.
当你这样做时for key, val in lst[0],你试图迭代一个值,即存储在索引0的值lst.但是,当您执行[0]而不是[0]时[:1],返回的不是单个值而是一系列值.在您的情况下,它可能只包含一个值,但它仍然是一个范围,因此可以for循环迭代.
对于一个简单的解释,看到这个伟大的答案由格雷格Hewgill名录切片是如何工作的.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |