我有一个清单:
list_to_transform = [['Start', 'двигаться', 'конгресс', 'сша'],
['Start', 'двигаться', 'сторона', 'в'],
['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
['Start', 'двигаться', 'сторона', 'признание', 'и']]
我需要的是将每两个单词组合成单个字符串,如果剩下单个单词,则将其与前两个单词组合:
result =[['Start двигаться', 'конгресс сша'],
['Start двигаться', 'сторона в'],
['Start двигаться', 'сторона признание', 'суверенитет израильский'],
['Start двигаться', 'сторона признание', 'высот на'],
['Start двигаться', 'сторона признание', 'высот оккупировать'],
['Start двигаться', 'сторона признание', 'высот Голанский'],
['Start двигаться', 'сторона признание и']]
有一些优雅的方法吗?任何帮助将不胜感激!
答案 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 двигаться', 'сторона признание и']]