在单行代码中从字符串创建元组

时间:2016-02-16 06:51:51

标签: 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

可以一行完成吗?

6 个答案:

答案 0 :(得分:2)

不要试图在一行中做所有事情,你的任务实际上不是一个行代码的好例子,倾向于更易读和可维护的代码。虽然这是一个单行,但它非常易读:

w, f = (int(e) if e.strip().isdecimal() else e.strip() for e in line.split(','))

答案 1 :(得分:1)

只有在使解决方案更好的情况下才使用单行内容。看起来像单线程使得理解算法的作用更加困难。 因此,保持两行,但摆脱所有不需要的.strip()来电和括号:

w, f = line.split(',')
w, f = w.strip(), int(f)

这个字符最少,似乎最具可读性。

答案 2 :(得分:0)

它不像你想要的那样一条线,但效果很好并且可读。

linesplit = line.strip().split(' , ')
w, f = linesplit[0], int(linesplit[1])

如果你不确定这里发生了什么,strip删除了\nsplit(' , ')会创建一个列表['StartupGrind', '26'],第二行会设置w到'StartupGrind和f到26

如果你真的想在一行中我想这会起作用:

w, f = line.split(' , ')[0], int(line.strip().split(' , ')[1])

答案 3 :(得分:0)

您应该更喜欢@Mike Müller's answer的2行变体:

w, f = line.split(',')
w, f = w.strip(), int(f)

这是另一个单行,不推荐

[(w, f)] = [(word.strip(), int(n)) for word, n in [line.split(',')]]

答案 4 :(得分:-1)

这是一行答案

w,f = map(lambda x: int(x) if x.strip().isdigit() else x, 'StartupGrind , 26\n'.strip().split(','))

答案 5 :(得分:-1)

我不知道这是否有帮助。但你可以试试这个。

w,f = line[:line.index(',')], int(line[line.index(',')+1:].strip())