![](/img/trans.png)
[英]Concatenating two lists of Strings element wise in Python without Nested for loops
[英]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:]
现在输入列表中的连字符值出现在不同的地方,这个片段不起作用。 非常感谢任何解决此问题的指针。
您的预期结果已排序为将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']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.