在不使用占位符的情况下,基于单个值连接两个嵌套列表

问题描述 投票:-2回答:1

我有嵌套列表,看起来像这样:

ar1 = [
    [
        '---- a ----',
        'p',
        'q'
    ],
    [
        '---- b ----',
        'm',
        'n'
    ]
    ]

ar2 = [
    [
        'i',
        '---- a ----',
        'j'
    ],
    [
        's',
        'r',
        '---- b ----'
    ]
    ]

我需要编写一个python脚本,它根据开始的值和4个连字符附加值。基本上期待这样的输出:

liop = [
    [
        '---- a ----',
        'p',
        'q',
        'i',
        'j'
    ], 
    [
        '---- b ----',
        'm',
        'n',
        'r',
        's'
    ]
    ]

以前使用连字符的值曾经是第一个值,这使我像这样编写脚本:

ar1len = len(ar1)-1
ar2len = len(ar2)-1
if(ar1len < ar2len):
    for i in range(0, ar1len):
        if ar1[i][0] == ar2[i][0]:
            ar1[i] = ar1[i] + ar2[i][1:]
    for i in range(ar2len,(1 + ar1len)):
            ar1[i] = ar1[i] + ar2[i]
else:
    for i in range(0, ar2len):
        if ar1[i][0] == ar2[i][0]:
            ar1[i] = ar1[i] + ar2[i][1:]

现在输入列表中的连字符值位于不同的位置,此代码段不起作用。非常感谢任何解决此问题的指针。

python python-3.x list nested concatenation
1个回答
1
投票

您的预期结果将与r交换s。所以我会使用排序。

你没有提到重复,所以也许一个排序集可能没问题。

liop = [sorted(set(*[ar1[0] + ar2[0]])), sorted(set(*[ar1[1] + ar2[1]]))]

如果你不想要set的行为,而是使用append和可能的排序,那么这可能没问题。

liop = [[''], ['']]

def merge(lst, index, sort_lst=False):
    for item in lst[index]:
        if item.startswith('----'):
            liop[index][0] = item
        else:
            liop[index].append(item)
    if sort_lst:
        liop[index].sort()

for index in range(2):
    merge(ar1, index, True)
    merge(ar2, index, True)

merge()的第三个参数是True以排序,否则你可以将它设置为False。

以上两个排序的返回:

[['---- a ----', 'i', 'j', 'p', 'q'], ['---- b ----', 'm', 'n', 'r', 's']]
© www.soinside.com 2019 - 2024. All rights reserved.