在不使用占位符的情况下,基于单个值连接两个嵌套列表
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 表单或表单字段?