我正在尝试使用list-comprehentions在一行中编写4-5行代码。但问题是我无法使用插入函数,所以我想知道是否有解决办法吗?
原始代码:
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')]
但是我遇到了以下错误:
NameError:未定义全局名称'insert'
我尝试使用insert,因为任务是使用每个单词中显示的数字重新排列列表中的项目。
例如,我有is2 Th1is T4est 3a
作为输入,它应该显示为:
Th1is is2 3a T4est
答案 0 :(得分:4)
除了使用列表推导之外,您应该只使用键功能中的这些数字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']
答案 1 :(得分:1)
您可以通过将代码分成几个简单的函数来实现原始想法,并列出正确的大小(填充None
s)以保存单词的最终排序:
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))