Python 从一行代码中的字符串创建元组
我正在从一个字符串创建一个元组,如下所示Python 从一行代码中的字符串创建元组,python,python-3.x,Python,Python 3.x,我正在从一个字符串创建一个元组,如下所示 line = 'StartupGrind , 26\n' #string w,f=line.strip().split(',') #get a tuple w,f= (w.strip(),int(f.strip())) #make it string,int 它能在一行中完成吗?这里是一个单行答案 w,f = map(lambda x: int(x) if x.strip().isdigit() else x, 'StartupGrind , 26\
line = 'StartupGrind , 26\n' #string
w,f=line.strip().split(',') #get a tuple
w,f= (w.strip(),int(f.strip())) #make it string,int
它能在一行中完成吗?这里是一个单行答案
w,f = map(lambda x: int(x) if x.strip().isdigit() else x, 'StartupGrind , 26\n'.strip().split(','))
不要试图在一行中完成所有工作,对于一行代码来说,您的任务实际上不是一个很好的示例,而是倾向于更可读和可维护的代码。虽然这里有一行,而且可读性很强:
w, f = (int(e) if e.strip().isdecimal() else e.strip() for e in line.split(','))
这不是你想要的那一行,但效果很好,可读性很强
linesplit = line.strip().split(' , ')
w, f = linesplit[0], int(linesplit[1])
如果您不确定这里发生了什么,strip
将删除\n
,split(',')
将创建一个列表['StartupGrind','26']
,第二行将w设置为'StartupGrind
,f设置为26
如果你真的想把它放在一行中,我想这是可行的:
w, f = line.split(' , ')[0], int(line.strip().split(' , ')[1])
我不知道这是否有用。但是你可以试试这个
w,f = line[:line.index(',')], int(line[line.index(',')+1:].strip())
只有在使您的解决方案更好的情况下,才使用一行程序。看起来像一条直线,这使得理解算法的功能更加困难。 因此,保持两行,但去掉所有不必要的
.strip()
调用和括号:
w, f = line.split(',')
w, f = w.strip(), int(f)
这是最少的字符,看起来也是最可读的 您应该更喜欢以下两行变体: 这里还有另一条航线,不推荐:
为什么人们总是想要Python中的“一行”?你可以在一行中完成它,但是试着把重点放在简单性和可读性上。这仅仅是因为如果可能的话,我想学习如何做到这一点!我还在学习python中的列表理解!我看不出列表理解在这里有什么用处。你有两个元素,你想以不同的方式对待它们。您可能会丢失第一个条带,因为后面的条带可以完成它的工作。@KillBill列表理解在这里没有用处。你可以做一些事情,比如:代码> w,f=行。拆分('',')[0 ],int(行。拆分('',')[1 ] .Stand())< /代码> -我不喜欢这个,因为<代码> Stule在这里被调用了两次。我不知道规则,但是你应该考虑张贴这样的问题。在那里可能更合适(将这样的代码打包成一行是一种糟糕的做法)。我也在上面的评论中等待您的评论,比如@Maroun的ans。对meThis来说更具可读性这段代码不起作用。”26\n“。isdigit为false。您也不需要将其转换为元组。从my cli错误复制,已修复,good catch@johnhoward请注意,此解决方案将自动忽略无效/意外的输入,如
某物,而不是数字。简单地说,此答案不提供任何值。它也更具可读性。我包含了一个只有一行的版本。您是否将内置的str()
重新定义为解决方案的副作用?对不起。我是Python新手。我不知道str是一个保留字。为什么我使用保留字时没有错误消息?@Ray:它不是保留字,是内置类型,任何不是保留字的东西都可以重新定义。
w, f = line.split(',')
w, f = w.strip(), int(f)
[(w, f)] = [(word.strip(), int(n)) for word, n in [line.split(',')]]