我正在创建一个字符串元组,如下所示。
line = 'StartupGrind , 26\n' #string
w,f=line.strip().split(',') #get a tuple
w,f= (w.strip(),int(f.strip())) #make it string,int
可以一行完成吗?
答案 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
删除了\n
,split(' , ')
会创建一个列表['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())