从textfi制作数字列表

2024-04-25 23:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个程序,从一个文本文件中提取一个数字列表。文件每行有一个整数。我试着像这样打开文件:

data = open(file).readlines()

但是如果我这样做,换行符\n会包含在列表中,并且我的bubblesort只按第一个数字排序(即6在19之后)。下面是一个运行程序的例子。我首先打印出未排序的列表,然后打印排序的列表

['13\n', '6\n', '87\n', '19\n', '8\n', '23\n', '8\n', '65']
['13\n', '19\n', '23\n', '6\n', '65', '8\n', '8\n', '87\n']

Tags: 文件程序列表data排序数字整数open
3条回答

需要整数列表:

int_data = [int(dat) for dat in data]

当然,最好一次只读取一个整数,而不是读取整个文件,然后将其转换为整数:

with open('datafile') as fin:
    int_data = [int(line) for line in fin]

您需要将data的元素转换成int,因为文件是作为字符串读入的。在进行转换之前,删除\n字符可能也是明智的,这可以通过^{}来完成

使用列表理解:

with open(file, 'r') as f:
    data = [int(line.strip()) for line in f]

我添加了^{}上下文管理器。在打开文件时使用它通常是一种很好的做法,因为它可以确保文件在打开之后被保存。还要注意的是,实际上并不需要readlines——在文件上迭代会默认地将每一行作为字符串提供

实际上,甚至不需要strip,因为int似乎会自动去除空白。我可能会留着以防万一

int(' 13')    # 13
int('13\t')   # 13
int('13 \n')  # 13

我建议去掉换行符和int转换。您可以在一行简洁的列表理解中完成这一点,但是如果列表理解语法混乱,for循环也就足够了

data = open(file).readlines()
out = [int(x.strip('\n') for x in data]
out.sort()

相关问题 更多 >