lis中子列表的条件合并

2024-05-18 11:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单

If last sublist has len>1:

x = [[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18]]

expected_output = [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18]]

If last sublist has len==1:

x = [[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18], [19]]

expected_output = [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18], [19]]

我正在尝试将长度为1的子列表与下一个子列表合并

如果最后一个子列表长度是1,我想保持原样

我试着写下面的代码

xt = []
for i in range(len(x)-1):
    if len(x[i]) == 1:
        xt.append(x[i]+x[i+1])
#         del x[i+1]
    if len(x[i])>1:
        xt.append(x[i])
print(xt)

Tags: 代码in列表foroutputlenifrange
2条回答

试试这个:

def ref1(l):
    con = 0
    l2 = []
    while con<len(l)-1:
        if len(l[con])==1:
            l2.append(l[con]+l[con+1])
            con +=2
        else:
            l2.append(l[con])
            con+=1
    if len(l[-1])==1:
        l2.append(l[-1])
    print(l2)

ref1([[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18]])
# OUTPUT : [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18]]

ref1([[0], [1, 2, 3], [4, 5], [6], [7, 8, 9], [10, 11, 12, 13], [15], [16, 17, 18], [19]])
# OUTPUT : [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9], [10, 11, 12, 13], [15, 16, 17, 18], [19]]

代码分析

xt = []
for i in range(len(x)-1):
    if len(x[i]) == 1:
        xt.append(x[i]+x[i+1])

这意味着您要在访问下一个子列表之前添加它

#         del x[i+1]
    if len(x[i])>1:
        xt.append(x[i])

而且它没有子列表是否已经被合并的历史记录

print(xt)

建议

  • 反过来访问列表,每次检查前一个列表的长度是否为1

或者

  • 保留上一个操作是否为合并的选项卡

至OP

如果你需要更多的帮助,请大声喊

相关问题 更多 >