Python 从文本文件制作数字列表
我正在尝试制作一个程序,从文本文件中冒泡排序一个数字列表。该文件每行有一个整数。我试着像这样打开文件:Python 从文本文件制作数字列表,python,sorting,file-io,Python,Sorting,File Io,我正在尝试制作一个程序,从文本文件中冒泡排序一个数字列表。该文件每行有一个整数。我试着像这样打开文件: data = open(file).readlines() 但是如果我这样做,换行符\n将包含在列表中,并且我的bubblesort仅按第一位数字对数字进行排序(即6在19之后)。下面是一个运行程序时发生的情况的示例。我首先打印未排序的列表,然后打印已排序的列表 ['13\n', '6\n', '87\n', '19\n', '8\n', '23\n', '8\n', '65'] ['13\
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']
您需要一个整数列表:
int_data = [int(dat) for dat in data]
with open('datafile') as fin:
int_data = [int(line) for line in fin]
当然,最好一次只读取一个整数,而不是读取整个文件,然后将其转换为整数:
int_data = [int(dat) for dat in data]
with open('datafile') as fin:
int_data = [int(line) for line in fin]
您需要将
数据的元素
转换为整数,因为文件是作为字符串读入的。在进行转换之前,删除可以使用的\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()
如果希望并非所有行都能转换为整数,请编写辅助生成器:
def safe_ints(iterable):
for item in iterable:
try:
yield int(item)
except ValueError as err:
continue
然后使用:
numbers = list(safe_ints(data))