我有一份清单:
list_to_transform = [['Start', 'двигаться', 'конгресс', 'сша'],
['Start', 'двигаться', 'сторона', 'в'],
['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
['Start', 'двигаться', 'сторона', 'признание', 'и']]
我需要的是将每两个单词组合成一个字符串,如果只剩下一个单词,那么将其与前两个单词组合起来:
result =[['Start двигаться', 'конгресс сша'],
['Start двигаться', 'сторона в'],
['Start двигаться', 'сторона признание', 'суверенитет израильский'],
['Start двигаться', 'сторона признание', 'высот на'],
['Start двигаться', 'сторона признание', 'высот оккупировать'],
['Start двигаться', 'сторона признание', 'высот Голанский'],
['Start двигаться', 'сторона признание и']]
有什么优雅的方法吗?任何帮助都将不胜感激!
发布于 2018-05-22 08:03:28
可以使用嵌套列表理解和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 двигаться', 'сторона признание и']]
发布于 2018-05-22 08:05:35
您可以使用map('{} {}'.format, lst[::2], lst[1::2])
将相邻单词连接到偶数长度的列表中。其余的是处理奇怪的情况,并映射到列表的列表。
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 двигаться', 'сторона признание и']
发布于 2018-05-22 08:03:26
将内部列表理解中的字符串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 двигаться', 'сторона признание и']]
https://stackoverflow.com/questions/50471870
复制