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



我有如下所示的嵌套列表:

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

现在,输入列表中的连字符值来自不同的地方,此代码段不起作用。非常感谢解决此问题的任何指示。

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

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

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

如果您不希望设置的行为,而是使用附加和可能的排序,那么这可能没问题。

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

最新更新