Как объединить список списков со списком строк - PullRequest
3 голосов
/ 01 октября 2019

У меня есть список ниже

a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]

И у меня есть два списка строк, и я хочу последовательно добавить их в список выше, чтобы сформировать новый список.

id = ['pid=1882','pid=1086','pid=180']

lgt = ['38.72347',
 '38.23833',
 '37.64986']

Результатом должно стать

new_list = [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], 
['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], 
['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]

Я пробовал метод zip, но вывод - это кортеж, а не список.

new_list = list(zip(a, id, lgt))

new_list -> [[['1321.', 'Fuji', 'Kto', '776'], 'pid=1882', '38.72347'], 
[['3123.', 'dake', 'Cu', '392'], 'pid=1086', '38.23833'], 
[['123.', 'Hota', 'Cu', '310'], 'pid=180', '37.64986']]]

Спасибо!

Ответы [ 4 ]

2 голосов
/ 01 октября 2019

С помощью кортежей, сгенерированных при сжатии трех списков, вы можете использовать итератор для распаковки, чтобы назначать элементы из ids и lgt в список для объединения с элементами списка из a:

[s + r for s, *r in zip(a, ids, lgt)]

Возвращает:

[['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'],
 ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'],
 ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
2 голосов
/ 01 октября 2019

Вы можете использовать zip, но впоследствии вам нужно распаковать элемент списка.

a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
ids = ['pid=1882', 'pid=1086', 'pid=180']
lgt = ['38.72347', '38.23833', '37.64986']

result = [[*x, y, z] for x, y, z in zip(a, ids, lgt)]
print(result)
# [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
1 голос
/ 01 октября 2019

Вы можете использовать следующее решение:

list(zip(*zip(*a), id, lgt))

Результат:

[('1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'),
 ('3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'),
 ('123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986')]

Если вам нужен список списков:

list(map(list, zip(*zip(*a), id, lgt)))
1 голос
/ 01 октября 2019

Проверьте это:

list = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
id = ['pid=1882','pid=1086','pid=180']
lgt = ['38.72347','38.23833','37.64986']

for index, value in enumerate(list):
    list[index].append(id[index])
    list[index].append(lgt[index])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...