如何连接列表元素

3

这里我有一个列表的列表,如果第二个元素有名称,我想要连接前两个元素。否则不进行任何操作。

以下是我尝试过的代码:

lst_1 = [['ANTWERP' 'BRIDGE', '05', 'N'], 
         ['NORTHERN' 'VIGOUR', '05', 'N'],
         ['BRIDGE', '98', 'N']]
for i in lst_1:
    for j in i:               
        j[0:2] = ['_'.join(j[0:2])]

预期输出:

[['ANTWERP_BRIDGE', '05', 'N'], 
 ['NORTHERN_VIGOUR', '05', 'N'],
 ['BRIDGE', '98', 'N']]

我有办法实现这个吗?


1
lst_1 目前引发了语法错误。请[编辑]。 - Mad Physicist
1
你不需要迭代内部列表,只需测试(使用if而不是for)。 - Mad Physicist
“如果列表的第二个元素有名称”是什么意思? - Barmar
1
@Sayse 看起来这就是我问题的答案。该元素只有一个名称,不需要合并两个名称。 - Barmar
2个回答

5

我认为不必过于思考,只需简单地将元素连接起来,然后添加其他剩余部分即可。

 [[f"{i[0]}_{i[1]}" if len(i) == 4 else i[0], *i[-2:]] for i in lst_1]

你没有理解只有拥有两个名称的元素(不是所有元素)需要进行合并的要点。 - Mad Physicist
1
@Barmar。如果你想跳过i[1],请不要执行它。 - Mad Physicist
2
非常整洁的解决方案。 - Mad Physicist

4

首先需要确定第二个元素是名称的含义。我建议有两种可能性。一种是检查子列表的长度:

if len(i) == 4:

另一种方法是检查整数:

if len(i) > 2 and not i[1].isdigit():

无论哪种情况,你都可以像以前一样进行合并,但要使用一个if代替内部的for循环:
for i in lst_1:
    if <condition>:
        i[:2] = ['_'.join(i[:2])]

这会在原地修改lst_1。如果你想要用一个新的对象来替换它,可以参考@Sayse的回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接