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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不使用占位符的情况下,基于单个值连接两个嵌套列表相关的知识,希望对你有一定的参考价值。

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

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

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

答案

您的预期结果将与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']]

以上是关于在不使用占位符的情况下,基于单个值连接两个嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 UDF 的情况下基于映射转换 Spark DataFrame 中的列

如何在不创建其他字段的情况下生成一个列表的嵌套 formik 表单或表单字段?

如何在不使用提交的情况下从下拉列表中选择值

在不循环的情况下连接单列中的记录?

如何在不丢失数据点顺序的情况下将 Pandas 中的字符串列表分解为单个列表

controller中的@PathVariable