Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一行代码中的字符串创建元组_Python_Python 3.x - Fatal编程技术网

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