Как преобразовать список?
Есть файл с данными в таком виде:
1 2
4 1
5 4
1 1
5 3
6 1
Нужно из него сделать такой список:
[
[
[1, 2],
[4, 1],
[5, 4]
],
[
[1, 1],
[5, 3],
[6, 1]
]
]
То есть разбить по парам и каждые 3 пары в список. Пока только смог сделать так:
['1', '2', '4', '1', '5', '4', '1', '1', '5', '3', '6', '1']
Подскажите, пожалуйста, как лучше всего сделать?
Ответы (3 шт):
def parseFile(file):
arr = [list(line.split()) for line in file]
return [[arr[i],arr[i+1],arr[i+2]] for i in range(0, len(arr)-2, 3)]
with open(filename, 'r') as file:
arr = parseFile(file)
По идее должно работать, не проверял, извините) Но идею вы поняли:
- читаем файл построчно
- каждую строку разбиваем по пробелу и приводим к типу список
- всё это оборачиваем в список
- проходим по каждому третьему элементу этого списка, начиная с первого
- суём по три элемента в список для каждой итерации
- оборачиваем это всё в список
Если я где-то допустил ошибку, то где-то промахнулся с индексами.
Если так, то поправьте, пожалуйста.
Можно так
with open(file, 'r') as file:
splitedList = [line.split() for line in file]
resultList = [splitedList[a:a+3] for a in range(0, len(splitedList), 3)]
Из вашего варианта результат можно получить вот так:
list = ['1', '2', '4', '1', '5', '4', '1', '1', '5', '3', '6', '1']
threelists = []
out = []
j=0
for i, k in zip(list[0::2], list[1::2]):
threelists.append([int(i), int(k)])
j+=1
if j%3==0 and j!=0:
out.append(threelists)
threelists = []
print(out)
Полное решение предлагаю такое:
Для открытия файла можно использовать open()
А open().readlines() вернет список сток
Пройдемся циклом по полученному списку, используем enumerate для получения номера итерации
Каждую 3 итерацию создадим новый список:
filename = "path/to/file"
with open(filename, 'r') as f:
data = f.readlines()
out = []
list2 = []
for i, j in enumerate(data):
line = [int(item) for item in j.split()]
list2.append(line)
if (i+1)%3==0 and i!=0:
out.append(list2)
list2 = []
print(out)