首先,让我告诉你我知道使用 join() 方法解决问题的方法。
我想用另一种方法来解决这个问题,我使用了如下的for语句。
liszt = ['Life', 'is', 'too', 'short']
restr = ''
for i in liszt: restr += i+' ' if liszt.index(i) != 3 else restr += i
print(restr)
我如何用 valid 语法纠正这个问题? 或者...有没有比我的更简单的编码方法?
当时我想用一行来表达下面同样的事情。但编辑告诉我这是无效的语法。
liszt = ['Life', 'is', 'too', 'short']
restr = ''
for i in liszt:
if liszt.index(i) != 3:
restr += i+' '
else:
restr += i
print(restr)
您可以在一行 for 循环中使用条件赋值,如下所示:
for i in liszt: restr += i + ' ' if liszt.index(i) != 3 else i
正如其他人所提到的,单行代码并不总是更好/更快/更具可读性。这是使用
functools.reduce
的解决方案。
from functools import reduce
liszt = ['Life','is','too','short']
restr = reduce(lambda x,y: x + ' ' + y, liszt)
print(restr)
另一个没有导入的:
restr = ''
for i,word in enumerate(liszt): restr += word + (' ' if i != len(liszt)-1 else '')
另一个使用
walrus
运算符的:
restr = ''
[restr := restr + (' ' if i else '') + word for i,word in enumerate(liszt)]
或者在您的问题中使用索引:
restr = ''
for i in liszt: restr += i+(' ' if liszt.index(i) != len(liszt)-1 else '')
使用递归 - 这是一行代码:
nstring = "this is a program running on computer"
nstring = "this is a program running on computer".split()
print(nstring)
# output -> ['this', 'is', 'a', 'program', 'running', 'on', 'computer']
def new_join_method(string): return '' if (len(string) == 0) else f"{string[0]} {func(string[1:])}".strip()
solution = new_join_method(nstring)
print(solution)
# output. --> 'this is a program running on computer'