如何在指定位置的列表中添加2列常量?

时间:2018-10-18 00:40:31

标签: python python-3.x list list-comprehension

我想在第一列和第二列的列表中添加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 :(得分:3)

您可以使用列表理解:

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

使操作“就地”在这里没有明显的优势。两种方式的时间复杂度都相同。

答案 1 :(得分:2)

使用pandas数据框很容易,如果您可以创建一个新列表而不是就地更改它,并且不介意安装额外的软件包。如果您使用大桌子,强烈建议使用pandas。为简单起见,我假设键入了列,在您的示例中就是这种情况。

下面的代码基于

how do I insert a column at a specific column index in pandas?

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非常灵活,或者,您可以创建一个包含两列的数据框并将其连接起来,如果您喜欢单线包装,请参见 Is it possible to add several columns at once to a 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,而更喜欢使用标准列表操作,则列表理解将比循环更紧凑,甚至更快。