首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python插入函数列表理解

python插入函数列表理解
EN

Stack Overflow用户
提问于 2017-04-12 16:27:48
回答 2查看 136关注 0票数 3

我试图使用列表理解在一行中编写4-5行代码.但这里的问题是,我不能使用插入函数,所以我想知道是否有一个解决办法?

原始代码:

代码语言:javascript
复制
def order(text):
    text = text.split()
    for x in text:
        for y in x:
            if y in ('1','2','3','4','5','6','7','8','9'):
                final.insert(int(y)-1, x)

    return final

到目前为止,我已经尝试过:

代码语言:javascript
复制
return [insert(int(y)-1, x) for x in text.split() for y in x if y in ('1','2','3','4','5','6','7','8','9')]

但我遇到了以下错误:

NameError:全局名称“insert”未定义为

我尝试使用insert,因为任务是使用每个单词中出现的数字重新排列列表中的项目。

例如,我将is2 Th1is T4est 3a作为输入,它应该以以下形式出现:

Th1is is2 3a T4est

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 16:31:49

与其使用列表理解,您应该使用键函数中的这些数字来sort列表,例如使用正则表达式提取数字。

代码语言:javascript
复制
>>> import re
>>> s = "is2 Th1is T4est 3a"
>>> p = re.compile("\d+")
>>> sorted(s.split(), key=lambda x: int(p.search(x).group()))
['Th1is', 'is2', '3a', 'T4est']
票数 4
EN

Stack Overflow用户

发布于 2017-04-12 16:49:08

您可以通过将代码分成几个简单的函数来实现您最初的想法,并列出一个适当大小的列表(填充了None)来保存单词的最终顺序:

代码语言:javascript
复制
def extract_number(text):
    return int(''.join(c for c in text if c.isdigit()))

def order(text):
    words = text.split()
    result = [None] * len(words)

    for word in words:
        result[extract_number(word) - 1] = word

    return ' '.join(result)

您还可以使用sorted()在一行中完成此操作。

代码语言:javascript
复制
def extract_number(text):
    return int(''.join(c for c in text if c.isdigit()))

def order(text):
    return ' '.join(sorted(text.split(), key=extract_number))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43374943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档