if 作为三元运算符 python
if as a ternary operator python
我正在尝试使用此功能(运行):
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
if string[i] != a[0]:
final.append(string[i])
final.pop(0)
else: break
print(final)
shift_on_character("zipfian", "f")
并尽可能简化。具体来说,我试图在 if 语句上使用三元运算符将该部分缩短为一行代码。
我要写:
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
final.append(string[i]) & final.pop(0) if string[i] != a[0] else break
print(final)
shift_on_character("zipfian", "f")
但是在简化 if 语句时,我总是遇到一些随机语法错误。如果我对 "true" 条件案例进行更简单的操作,或者如果我取消 else,那么我仍然会收到一个错误,这意味着 python 在 "if" 条件下遇到问题。
这是怎么回事,我该如何解决?
谢谢!
您的问题是使用 break
作为三元 if
的一部分。如果你真的想使用三元if,你可以这样做:
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
if string[i] == a[0]: break
final.append(string[i]) or final.pop(0) if string[i] != a[0] else False
print(final)
shift_on_character("zipfian", "f")
之所以可行,是因为您并没有真正使用表达式的结果,而只是依赖于它的副作用。总的来说,这真的不是一个好习惯,我会保留你之前的原始表达方式。
您不能将 break
与三元运算符一起使用。如果我理解你的函数(它围绕它找到的第一个 char 实例旋转),那么为什么不简单地实现为:
def shift_on_character(string, char):
try:
pos = string.index(char)
return string[pos:] + string[:pos]
except IndexError:
# what do you want to do if char is not in string??
return string
使用 Python 的 built-in 函数会更简单(也更快):
def shift_on_character(string, char):
try:
index = string.lower().index(char.lower())
string = string[index:] + string[:index]
except ValueError:
pass
return list(string)
我正在尝试使用此功能(运行):
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
if string[i] != a[0]:
final.append(string[i])
final.pop(0)
else: break
print(final)
shift_on_character("zipfian", "f")
并尽可能简化。具体来说,我试图在 if 语句上使用三元运算符将该部分缩短为一行代码。 我要写:
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
final.append(string[i]) & final.pop(0) if string[i] != a[0] else break
print(final)
shift_on_character("zipfian", "f")
但是在简化 if 语句时,我总是遇到一些随机语法错误。如果我对 "true" 条件案例进行更简单的操作,或者如果我取消 else,那么我仍然会收到一个错误,这意味着 python 在 "if" 条件下遇到问题。
这是怎么回事,我该如何解决?
谢谢!
您的问题是使用 break
作为三元 if
的一部分。如果你真的想使用三元if,你可以这样做:
def shift_on_character(string, char):
final = list(string)
a = [i for index, i in enumerate(string) if i.lower() == char.lower()]
for i in range(0,len(string)):
if string[i] == a[0]: break
final.append(string[i]) or final.pop(0) if string[i] != a[0] else False
print(final)
shift_on_character("zipfian", "f")
之所以可行,是因为您并没有真正使用表达式的结果,而只是依赖于它的副作用。总的来说,这真的不是一个好习惯,我会保留你之前的原始表达方式。
您不能将 break
与三元运算符一起使用。如果我理解你的函数(它围绕它找到的第一个 char 实例旋转),那么为什么不简单地实现为:
def shift_on_character(string, char):
try:
pos = string.index(char)
return string[pos:] + string[:pos]
except IndexError:
# what do you want to do if char is not in string??
return string
使用 Python 的 built-in 函数会更简单(也更快):
def shift_on_character(string, char):
try:
index = string.lower().index(char.lower())
string = string[index:] + string[:index]
except ValueError:
pass
return list(string)