我有一个嵌套列表:
listSchedule = [[list1], [list2], etc..]]
我还有另一个列表,如果每个列表的第一个元素与字符串匹配,我想将此列表的元素追加到每个嵌套列表中。
我可以做到,但是我想知道使用列表理解是否还有更多的“ pythonic”方式?
index = 0;
for row in listSchedule:
if row[0] == 'Download':
row[3] = myOtherList[index]
index +=1
答案 0 :(得分:4)
您的代码可读性强,我不会更改它。
通过列表理解,您可以编写如下内容:
for index, row in enumerate([row for row in listSchedule if row[0] == 'Download']):
row[3] = myOtherList[index]
答案 1 :(得分:1)
您可以尝试这样做,但要复制另一个列表,以免丢失信息:
[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]]
答案 2 :(得分:0)
如果您想真正地LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
EndPaint(hwnd, &ps);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
,为什么不使用append
?这样一来,您就避免了row.append(myOtherList[index])
IndexErrors
答案 3 :(得分:0)
我们可以使用队列,并在满足条件时逐一弹出其值。为了避免数据复制,我们使用迭代器将队列实现为myOtherList
上的视图(感谢ShadowRanger)。
queue = iter(myOtherList)
for row in listSchedule:
if row[0] == "Download":
row.append(next(iter))