python - объединение списков из 2 текстовых файлов - PullRequest
0 голосов
/ 19 ноября 2018

Я очень плохо знаком с 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)

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 19 ноября 2018

Прежде всего, для присоединения к спискам вы можете использовать простой оператор +:

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

Редактировать

@ Вышеупомянутое решение Мюррея работает просто отлично, но оно не подходит для вашего варианта использования, так как в ваших текстовых файлах есть строка с похожим списком:

Это numbers1.txt: [0, 4, 6, 6, 22, 23, 44] и это numbers2.txt: [1, 4, 5, 6, 7, 22, 777] - Мюррей 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]

Теперь позвольте мне разбить этот код на части:

  1. Прежде всего, открыть файл (ы). Я сделал это с помощью цикла for, поэтому мне не нужно повторять with open... каждый раз, когда я хочу что-то открыть (это проще и код более читабелен).
  2. Читать все строки из файла. (Я предполагал, что ваш файл может иметь более одной строки со списком, подобным строке)
  3. Разбор каждой строки и добавление в список.
    • line.rstrip() - удалить завершающий перевод строки
    • .strip('[]') - убрать квадратные скобки из строки
    • .split(', ') - разделить строку запятой и пробелом, чтобы получить массив строковых символов
    • merged.append(int(num)) для каждого символа разберите его на int и добавьте в список.
  4. Последний, но не менее важный список сортировки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...