在Python中加入列表元素对

时间:2018-05-22 15:52:46

标签: python python-3.x list

我有一个清单:

list_to_transform = [['Start', 'двигаться', 'конгресс', 'сша'],
     ['Start', 'двигаться', 'сторона', 'в'],
     ['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'и']]

我需要的是将每两个单词组合成单个字符串,如果剩下单个单词,则将其与前两个单词组合:

result =[['Start двигаться', 'конгресс сша'],
     ['Start двигаться', 'сторона в'],
     ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
     ['Start двигаться', 'сторона признание', 'высот на'],
     ['Start двигаться', 'сторона признание', 'высот оккупировать'],
     ['Start двигаться', 'сторона признание', 'высот Голанский'],
     ['Start двигаться', 'сторона признание и']]

有一些优雅的方法吗?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以使用map('{} {}'.format, lst[::2], lst[1::2])加入偶数长度列表中的相邻字词。其余的是处理奇数情况并映射到列表的lsit。

lsts = [['Start', 'двигаться', 'конгресс', 'сша'],
     ['Start', 'двигаться', 'сторона', 'в'],
     ['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'и']]


def proc_single(lst):
    # join adjacent words
    res = list(map('{} {}'.format, lst[::2], lst[1::2]))
    # correct for lists with odd length
    if len(lst) % 2:
        res[-1] = '{} {}'.format(res[-1], lst[-1])

    return res

for lst in lsts:
    print(proc_single(lst))

# ['Start двигаться', 'конгресс сша']
# ['Start двигаться', 'сторона в']
# ['Start двигаться', 'сторона признание', 'суверенитет израильский']
# ['Start двигаться', 'сторона признание', 'высот на']
# ['Start двигаться', 'сторона признание', 'высот оккупировать']
# ['Start двигаться', 'сторона признание', 'высот Голанский']
# ['Start двигаться', 'сторона признание и']

答案 1 :(得分:1)

在内部列表理解中将字符串2乘2分组,使用外部列表理解来迭代子列表。

如果到达列表的末尾,添加一个小技巧来加入3,这样你就没有孤儿了。并确保您正在迭代到甚至范围,以便不重复孤儿(通过反复试验进行微调:))

lst = [['Start', 'двигаться', 'конгресс', 'сша'],
     ['Start', 'двигаться', 'сторона', 'в'],
     ['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'и']]

result = [[" ".join(subl[i:i+(2 if i < len(subl)-3 else 3)]) for i in range(0,(len(subl)//2)*2,2)] for subl in lst]

结果:

[['Start двигаться', 'конгресс сша'], ['Start двигаться', 'сторона в'],
 ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
 ['Start двигаться', 'сторона признание', 'высот на'],
 ['Start двигаться', 'сторона признание', 'высот оккупировать'],
 ['Start двигаться', 'сторона признание', 'высот Голанский'],
 ['Start двигаться', 'сторона признание и']]

答案 2 :(得分:1)

您可以使用带有if / else子句的嵌套列表推导来决定您的索引器。

res = [[' '.join(i[k:(k+2 if k+3 != len(i) else k+3)])
        for k in range(0, len(i)-1, 2)] for i in lst]

print(res)

[['Start двигаться', 'конгресс сша'],
 ['Start двигаться', 'сторона в'],
 ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
 ['Start двигаться', 'сторона признание', 'высот на'],
 ['Start двигаться', 'сторона признание', 'высот оккупировать'],
 ['Start двигаться', 'сторона признание', 'высот Голанский'],
 ['Start двигаться', 'сторона признание и']]