首页 > 解决方案 > 扩展/附加 python 连接列表

问题描述

我有一个例子:

li = [['b', 'b', 'c', '3.2', 'text', '3', '5', '5'], ['a', 'w', '3', '4'], ['a', 'x', '3', '4'],['a','b'],['312','4']]

a = 0
b = []
c = []
count = []
for x in range(len(li)):
    for a in range(len(li[x])):
        if li[x][a].isalpha():
            a += 1
        elif not li[x][a].isalpha() and li[x][a + 1].isalpha():
            a += 1
        else:
            break
    i = (len(li[x]) - a)
    b.extend([' '.join(li[x][0:a])])
    b.extend(li[x][a::])
    count.append(i)


for x in range(len(count)):
    a = count[x] + 1
    z = (sum(count[:x]))
    if x == 0:
        c.append(b[:a])
    else:
        c.append(b[a+1::z])


print(c)

我在li列表中有各种项目,并且列表本身的长度不是恒定的。如果数组中的任何元素是字符串,或者如果两个字符串之间有其他符号,它会将所有内容组合成一个元素 - 这个连接按我的意愿工作。

我想保留现有的结构。例如,输出现在如下所示:

[['b b c 3.2 text', '3', '5', '5'], ['a w', 'a x', 'a b', '4'], ['a w', '4'], ['5', '4'], ['a w', '']]

但它应该是这样的:

[['b b c 3.2 text', '3', '5', '5'],['aw','3','4'],['ax','3','4'],['ab'],['312','4']

当然,我发送的代码不能正常工作-我想到了一个解决方案,但我仍然遇到一些问题-我不知道如何将范围添加到此列表中c-我尝试拉取列表元素的长度但count它也对我不起作用 - 也许这是一个糟糕的解决方案?也许这个扩展b不是最好的解决方案?也许使用这么多“转换”并创建新列表没有意义?让我一些提示。

标签: pythonlistextend

解决方案


这个定义对我来说有点不清楚,但我认为这会做到。不过,代码不是很冗长。如果它符合您的意图,我可以尝试解释/使其更简单。

li = [['b', 'b', 'c', '3.2', 'text', '3', '5', '5'], ['a', 'w', '3', '4'], ['a', 'x', '3', '4'],['a','b'],['312','4']]

def join_to_last_text(lst: list, min_join: int = 1) -> list:
    last_text = max((i for i,s in enumerate(lst) if s.isalpha()), default=min_join - 1)
    return [' '.join(lst[:last_text + 1])] + lst[last_text + 1:]

output = [join_to_last_text(lst) for lst in li]
print(output)

# You can join a minimum of first items by setting a higher max default.
# If max does not find isalpha, it will use this value.
output_min_2 = [join_to_last_text(lst, min_join=2) for lst in li]
print(output_min_2)

推荐阅读