python插入函数列表理解

2024-09-19 23:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

原始代码:

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

到目前为止,我尝试了:

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')]

但我面临以下错误:
名称错误:未定义全局名称“insert”

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

例如,我有is2 Th1is T4est 3a作为输入,结果应该是:
Th1is is2 3a T4est


Tags: 代码textin名称列表forreturnif
2条回答

您可以通过将代码拆分为几个简单的函数来实现您的原始想法,并创建一个适当大小的列表(用None填充)来保存单词的最终顺序:

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()在一行中执行此操作:

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))

与其使用列表理解,不如在key函数中使用这些数字来sort列表,例如使用正则表达式提取数字。你知道吗

>>> 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']

相关问题 更多 >