索引时接收意外输出

时间:2014-05-01 23:13:47

标签: python python-3.x

我希望我的代码要做的是获取输入文件并从文件中读取整数列表(例如40341452) ,然后我希望它将这些整数保存到列表中,然后使用负索引向后迭代列表,反过来显示它们。

fileobject = open(filename,'r')
contents = fileobject.read()
fileobject.close()

contentlength = (-len(contents)-1)
for i in range(-1,contentlength,-1):
    print(contents[i])

代码以相反的顺序运行并打印出我的数字,但它会以奇怪的间距打印出来。如果文件包含数字40341452,则以下是示例输出:

2
5

4
1

4
3

0
4

1 个答案:

答案 0 :(得分:0)

您当前代码的问题在于您永远不会拆分您的输入数字。您将迭代输入文件的文本并一次将其写回一个字符(以相反的顺序)。如果您希望数字保持不变(例如"40",而不是"0"后跟"4"),并且输入中的空格不会出现在输出中,您可以在你反向写出来之前,我需要拆分输入字符串。

尝试:

with open(filename) as f:  # a with statement handles closing the file automatically
    text = f.read()        # read file as a single string

contents = text.split()    # form a list by splitting the text on whitespace

其余代码(执行输出循环)可以像当前一样工作。然而,更多的" Pythonic"解决方案是在列表上的反向迭代器上使用for循环,而不是使用range和索引:

for num_string in reversed(contents):
    print(num_string)

请注意"数字"由此代码处理的实际上不是int个对象。它们始终保持着弦。如果您确实需要对值进行一些数学运算,而不是仅仅打印它们,那么您可能希望使用int构造函数将字符串转换为实际的Python数字。