Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文本文件制作数字列表_Python_Sorting_File Io - Fatal编程技术网

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))