我想在第一列和第二列的列表中添加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']]
但是我认为这不是一个好主意,还有其他方法吗?
答案 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,而更喜欢使用标准列表操作,则列表理解将比循环更紧凑,甚至更快。