Как добавить 2 столбца константы в список в указанных местах? - PullRequest
0 голосов
/ 18 октября 2018

Я хочу добавить константу из 2 столбцов в список в 1-м и 2-м столбцах.

Я написал 2 цикла, потому что хотел добавить 2 столбца.

Я использую этокод:

list_a=[[1,'aa'],[2,'bb'],[3,'cc'],[4,'dd']]
constant1=2018
constant2=30
for item in list_a:
    item.insert(0,constant1)
for item in list_a:
    item.insert(1,constant2)
print(list_a)

Вывод:

[[2018, 30, 1, 'aa'], [2018, 30, 2, 'bb'], [2018, 30, 3, 'cc'], [2018, 30, 4, 'dd']]

Но я думаю, что это не очень хорошая идея, есть ли другой способ?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете использовать понимание списка:

res = [[2018, 30, *v] for v in list_a]

[[2018, 30, 1, 'aa'],
 [2018, 30, 2, 'bb'],
 [2018, 30, 3, 'cc'],
 [2018, 30, 4, 'dd']]

Выполнение операций "на месте" не имеет здесь существенного преимущества.В любом случае у вас одинаковая временная сложность.

0 голосов
/ 18 октября 2018

Это легко с pandas dataframe, если вы в порядке создания нового списка, а не изменения его на месте и не возражаете против установки дополнительного пакета.Панды настоятельно рекомендуется, если вы работаете с большими столами.Для простоты я предполагаю, что столбцы набраны, как в вашем примере.

Приведенный ниже код основан на

как мне вставить столбец с определенным индексом столбца в пандах?

import pandas as pd

df = pd.DataFrame(list_a)
df.insert(0, "first", value=constant1)
df.insert(1, "second", value=constant2)

list_a = df.values.tolist()

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

Хотя я держу его близко к вашему решению, но Pandas достаточно гибок, в качестве альтернативы, вы можете создать фрейм данных с двумя столбцами и объединить его, если вам интересна одна строка, см. Можно ли добавить несколько столбцов водин раз для панды DataFrame?

Если ограничено стандартными операциями списков или предпочитаете изменять список на месте.Ну, одного цикла должно хватить

for item in list_a:
   item.insert(0, constant2)
   item.insert(0, constant1)

И один изменить строку в одну строку

for (i, item) in enumerate(list_a):
    list_a[i] = [constant1, constant2].extend(item)

Если вы в порядке с созданием нового списка, вместо того, чтобы изменить list_a на месте,и предпочтительнее использовать стандартные операции над списком, понимание списка будет еще более компактным и даже немного быстрее, чем цикл.

...