Python在列表的特定索引处用类包装并返回整个列表

Python在列表的特定索引处用类包装并返回整个列表,python,list,tuples,Python,List,Tuples,我有一个元组列表。我想用一个名为paragration()的类将每个元组的值包装在index=1处,然后返回整个列表 description_index = 1 line_data = [ ('1', 'PRODUCT 1<br/>new line', '1.00 pc', '1.00', '2,000.00', '2,000.00'), ('100000', 'PRODUCT 2', '1.00 pc', '20.00', '5.00', '100.00') ]

我有一个元组列表。我想用一个名为
paragration()
的类将每个元组的值包装在
index=1
处,然后返回整个列表

description_index = 1
line_data = [
    ('1', 'PRODUCT 1<br/>new line', '1.00 pc', '1.00', '2,000.00', '2,000.00'), 
    ('100000', 'PRODUCT 2', '1.00 pc', '20.00', '5.00', '100.00')
]
我也尝试过使用列表理解,但我不确定它是否会更快

def wrap_with_paragraph(line_data):
    return [
        [Paragraph(x) if i == 1 else x for i, x in enumerate(l)]
        for l in line_data
    ]

由于元组是不可变的(不能
l[i]=p(l[i])
),因此可以使用元组切片:

def wrap_with_paragraph(line_data, i):
    return line_data[:i] + (Paragraph(line_data[i]),) + line_data[i + 1:]a[i])

太棒了,行得通
[对于行内数据,用段落(第1行)换行]
我怀疑这会比使用列表理解更快。这如何更有效?至少,它的空间效率要低一点,尽管在具有相同渐进复杂性的情况下…。@juanpa.arrivillaga我不知道一个更有效的解决方案,所以如果你知道一个更好的解决方案,我很乐意看到它。@bdoubleu没有任何更有效的算法解决方案,你必须接触每个元素,所以你能做的就是线性时间。我不认为上面的方法对大型的
I
,仅仅是因为它对数据进行了多次传递,因为您使用的是
list
切片和串联,尽管对于小型列表,这通常更快,因为Python
list
对象用高效的代码实现这些东西
def wrap_with_paragraph(line_data, i):
    return line_data[:i] + (Paragraph(line_data[i]),) + line_data[i + 1:]a[i])