繁体   English   中英

基于单个值连接两个嵌套列表而不使用占位符

[英]Concatenating two nested lists based on a single value without using placeholders

我有一个看起来像这样的嵌套列表:

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:]

现在输入列表中的连字符值出现在不同的地方,这个片段不起作用。 非常感谢任何解决此问题的指针。

您的预期结果已排序为将rs交换。 所以我会使用排序。

您没有提及重复项,因此排序集可能没问题。

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']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM