如何只用一行写 for&if-else 语句?

问题描述 投票:0回答:3
  • 将列表设为字符串:让我们将列表 [“Life”、“is”、“too”、“short”] 制作为“Life is too short”字符串并将其打印出来。

首先,让我告诉你我知道使用 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)

python for-loop if-statement
3个回答
0
投票

您可以在一行 for 循环中使用条件赋值,如下所示:

for i in liszt: restr += i + ' ' if liszt.index(i) != 3 else i

0
投票

正如其他人所提到的,单行代码并不总是更好/更快/更具可读性。这是使用

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 '')

0
投票

使用递归 - 这是一行代码:

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'
© www.soinside.com 2019 - 2024. All rights reserved.