首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python中列表元素对的连接

Python中列表元素对的连接
EN

Stack Overflow用户
提问于 2018-05-22 07:52:45
回答 3查看 194关注 0票数 4

我有一份清单:

代码语言:javascript
运行
AI代码解释
复制
list_to_transform = [['Start', 'двигаться', 'конгресс', 'сша'],
     ['Start', 'двигаться', 'сторона', 'в'],
     ['Start', 'двигаться', 'сторона', 'признание', 'суверенитет', 'израильский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'на'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'оккупировать'],
     ['Start', 'двигаться', 'сторона', 'признание', 'высот', 'Голанский'],
     ['Start', 'двигаться', 'сторона', 'признание', 'и']]

我需要的是将每两个单词组合成一个字符串,如果只剩下一个单词,那么将其与前两个单词组合起来:

代码语言:javascript
运行
AI代码解释
复制
result =[['Start двигаться', 'конгресс сша'],
     ['Start двигаться', 'сторона в'],
     ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
     ['Start двигаться', 'сторона признание', 'высот на'],
     ['Start двигаться', 'сторона признание', 'высот оккупировать'],
     ['Start двигаться', 'сторона признание', 'высот Голанский'],
     ['Start двигаться', 'сторона признание и']]

有什么优雅的方法吗?任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-22 08:03:28

可以使用嵌套列表理解和if / else子句来决定索引器。

代码语言:javascript
运行
AI代码解释
复制
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 двигаться', 'сторона признание и']]
票数 1
EN

Stack Overflow用户

发布于 2018-05-22 08:05:35

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

代码语言:javascript
运行
AI代码解释
复制
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 двигаться', 'сторона признание и']
票数 2
EN

Stack Overflow用户

发布于 2018-05-22 08:03:26

将内部列表理解中的字符串2×2分组,使用外部列表理解对子列表进行迭代。

如果到达列表的末尾,添加一些小技巧加入3,这样你就没有孤儿了。并确保您正在迭代到一个偶数范围,这样孤儿就不会重复(通过试用和错误:)

代码语言:javascript
运行
AI代码解释
复制
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]

结果:

代码语言:javascript
运行
AI代码解释
复制
[['Start двигаться', 'конгресс сша'], ['Start двигаться', 'сторона в'],
 ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
 ['Start двигаться', 'сторона признание', 'высот на'],
 ['Start двигаться', 'сторона признание', 'высот оккупировать'],
 ['Start двигаться', 'сторона признание', 'высот Голанский'],
 ['Start двигаться', 'сторона признание и']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50471870

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文