我是Python的新手。我想获取2个文本文件的内容,将它们转换为2个列表,将它们合并在一起,并按从小到大的顺序排序。
将它们转换为列表似乎很容易,但是我无法正确合并以进行排序。
它们像这样(列表列表而不是单个列表)出来: ['[0,4,6,6,22,23,44]','[1,4,5,6,7,22,777]']
这是我的代码:
with open('numbers1.txt','r') as newfile1:
list1 = newfile1.read().splitlines()
print (list1)
with open('numbers2.txt','r') as newfile2:
list2 = newfile2.read().splitlines()
print (list2)
merged = []
for i in range(0, len(list1)) :
merged.append(list1[i])
merged.append(list2[i])
print(merged)
在此先感谢您的帮助。
答案 0 :(得分:2)
首先,要加入列表,您可以使用简单的+
运算符:
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> merged = l1 + l2
>>> print(merged)
[1, 2, 3, 4, 5, 6]
现在可以使用python内置的sort()
函数进行排序了:
Python列表具有内置的list.sort()方法,用于修改列表 到位。 默认情况下,sort()不需要任何其他参数。但是, 有两个可选参数:
reverse-如果为true,则将排序列表反转(或排序为 降序)
键-用作排序键的功能 比较
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> merged = l2 + l1
>>> print(merged)
[4, 5, 6, 1, 2, 3]
>>> merged.sort(key=int)
>>> print(merged)
[1, 2, 3, 4, 5, 6]
@Murray上面提到的解决方案可以很好地工作,但是它不适合您的用例,因为在文本文件中您具有类似字符串的列表:
这是numbers1.txt:[0、4、6、6、22、23、44],这是numbers2.txt:[1、4、5、6、7、22、777] – Murray 1小时以前
现在,当您以list1/list2
格式读取文件时,实际上会得到一个包含一个元素的列表,该元素是字符串。
>>> with open("numbers1.txt", "r") as f:
... print(list1)
... print(type(list1))
... print(len(list1))
... print(type(list1[0]))
...
['[0, 4, 6, 6, 22, 23, 44]']
<type 'list'>
1
<type 'str'>
为了从文件中追加这些数字,您需要首先解析它们。可以这样实现(取决于您的确切用例,最终解决方案可能会有所不同):
$ cat numbers1.txt
[0, 4, 6, 6, 22, 23, 44]
$ cat numbers2.txt
[1, 4, 5, 6, 7, 22, 777]
$ cat test.py
files = ['numbers1.txt', 'numbers2.txt']
merged = []
for f in files:
with open(f,'r') as lines:
for line in lines:
for num in line.rstrip().strip('[]').split(', '):
merged.append(int(num))
print(merged)
merged.sort()
print(merged)
$ python test.py
[0, 4, 6, 6, 22, 23, 44, 1, 4, 5, 6, 7, 22, 777]
[0, 1, 4, 4, 5, 6, 6, 6, 7, 22, 22, 23, 44, 777]
$ python3 test.py
[0, 4, 6, 6, 22, 23, 44, 1, 4, 5, 6, 7, 22, 777]
[0, 1, 4, 4, 5, 6, 6, 6, 7, 22, 22, 23, 44, 777]
现在让我将这段代码分解为几段:
with open...
(这更容易,代码更易读)。line.rstrip()
-删除尾随换行符.strip('[]')
-从字符串中删除方括号.split(', ')
-按逗号和空格分隔字符串以获取字符串字符数组merged.append(int(num))
每个字符将其解析为int并追加到列表中。