使用enumerate在Python中将上一个列表中的元素添加到当前列表

2024-05-28 19:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的清单如下:

list1 = ['amazon', 'jeff bezos', '56']
list2 = ['', 'mackenzie bezos', '50']
list3 = ['', 'preston bezos', '20']
list4 = ['microsoft', 'bill gates', '64']
list5 = ['', 'melinda gates', '55']

在哪里

lists = [list1, list2, list3, list4, list5]

基本上,我希望空字段由上一个列表中相同索引中的元素填充。如何使我的输出如下所示

list1 = ['amazon', 'jeff bezos', '56']
list2 = ['amazon', 'mackenzie bezos', '50']
list3 = ['amazon', 'preston bezos', '20']
list4 = ['microsoft', 'bill gates', '64']
list5 = ['microsoft', 'melinda gates', '55']

Tags: amazonlistsmicrosoftjeffbilllist2list1gates
3条回答

像这样的方法应该会奏效:

lists = [list1, list2, list3, list4, list5]
for i, l in enumerate(lists):
    if not l[0]:
        l[0] = lists[i-1][0]

您可以使用字典来跟踪以前看到的列,使用索引作为键。然后使用该列中以前找到的值更新空的''值。我假设前面的值可以是除''以外的任何值

from pprint import pprint

list1 = ['amazon', 'jeff bezos', '56']
list2 = ['', 'mackenzie bezos', '50']
list3 = ['', 'preston bezos', '20']
list4 = ['microsoft', 'bill gates', '64']
list5 = ['', 'melinda gates', '55']

lists = [list1, list2, list3, list4, list5]

prev_col_values = {}
for row, lst in enumerate(lists):
    for col, word in enumerate(lst):
        if not word:
            lists[row][col] = prev_col_values.get(col, '')
            continue    
        prev_col_values[col] = word

pprint(lists)

输出:

[['amazon', 'jeff bezos', '56'],
 ['amazon', 'mackenzie bezos', '50'],
 ['amazon', 'preston bezos', '20'],
 ['microsoft', 'bill gates', '64'],
 ['microsoft', 'melinda gates', '55']]

如果任何值为空,则此操作将起作用。不仅仅是第一个值

list1 = ['amazon', 'jeff bezos', '56']
list2 = ['', 'mackenzie bezos', '50']
list3 = ['', 'preston bezos', '20']
list4 = ['microsoft', 'bill gates', '64']
list5 = ['', 'melinda gates', '55']

lists = [list1, list2, list3, list4, list5]

for i, arr in enumerate(lists[1:]): # Just iterate through lists but from the the 2nd list. Not the first.
    for j in range(len(arr)): # Iterate through inner list
        if not arr[j]: # Means blank or None
            arr[j] = lists[i][j]  # Replace value with the previous list. Remember i points one less because we have started from 2nd list
for arr in lists:
    print(arr)

#Output
['amazon', 'jeff bezos', '56']
['amazon', 'mackenzie bezos', '50']
['amazon', 'preston bezos', '20']
['microsoft', 'bill gates', '64']
['microsoft', 'melinda gates', '55']

相关问题 更多 >

    热门问题