向嵌套列表添加元素的pythonic方法

向嵌套列表添加元素的pythonic方法,python,Python,我有一张清单: listSchedule = [[list1], [list2], etc..]] 我有另一个列表,如果每个嵌套列表的第一个元素与字符串匹配,我想将该列表的元素附加到每个嵌套列表中 我能做到,但我想知道是否有一种更“pythonic”的方法,使用列表理解 index = 0; for row in listSchedule: if row[0] == 'Download': row[3] = myOtherList[index] index +=1

我有一张清单:

listSchedule = [[list1], [list2], etc..]]
我有另一个列表,如果每个嵌套列表的第一个元素与字符串匹配,我想将该列表的元素附加到每个嵌套列表中

我能做到,但我想知道是否有一种更“pythonic”的方法,使用列表理解

index = 0;
for row in listSchedule:
   if row[0] == 'Download':
      row[3] = myOtherList[index]
      index +=1

你的代码非常可读,我不会更改它

通过列表理解,您可以编写如下内容:

对于索引,枚举中的行([listSchedule中的行对应于行,如果行[0]=='Download']):
第[3]行=myOtherList[索引]

您可以尝试一下,但复制一份otherlist以避免丢失信息:

[row+[myotherlist.pop(0)] if row[0]=='Download' else row for row in listScheduel]
例如:

list = [['Download',1,2,3],[0,1,2,3],['Download',1,2,3],['Download',1,2,3]]
otherlist = [0,1,2,3,4]
l = [ row+[otherlist.pop(0)] if row[0]=='Download' else row for row in list]
输出:

[['Download', 1, 2, 3, 0],
[0, 1, 2, 3],
['Download', 1, 2, 3, 1],
['Download', 1, 2, 3, 2]]

如果您想真正地
append
,为什么不使用
row.append(myOtherList[index])
?这样可以避免
索引器

i = 0

for row in listSchedule:
    if row[0]=="Download":
        row.append(myOtherList[i])
        i+=1

当我们满足条件时,我们可以使用队列并逐个弹出它的值。为了避免复制数据,让我们使用迭代器将队列实现为
myOtherList
上的视图(感谢)


您不只是使用
dict
(或者如果
Download
可能会出现多次,那么使用类似于
collections.defaultdict(list)
)之类的多
dict
或其他东西,有什么原因吗?需要在每个元素上循环找到一个“头”来向其添加数据,这听起来非常像您想要一个
dict
的情况。我看得越多,我就越怀疑。你能提供更多关于这个问题的细节吗?这样我们就不会仅仅对一个糟糕的设计进行修补了?即使是real也会有帮助(正如所写的那样,此代码保证了一个
索引器,因为它分配给
行[3]
,但是您提供的
列表调度
是len 1
列表
列表,所以除了
行[0]之外的任何索引
将出错。省略括号;此处不需要临时的
列表(
enumerate
非常乐意使用生成器,它不需要完整的序列)。如果没有括号,
enumerate(如果行[0]='Download',则listSchedule中的行对应行)
枚举生成惰性行的生成器表达式,不需要潜在的大型临时
列表
s。只需
queue=iter(myOtherList)
row.append(next(queue))即可保存临时
deque
。假设
myOtherList
没有在循环中被修改,但是得到相同的行为,没有开销。
queue = iter(myOtherList)

for row in listSchedule:
    if row[0] == "Download":
        row.append(next(iter))