Python 作为三元运算符的if

Python 作为三元运算符的if,python,if-statement,ternary-operator,Python,If Statement,Ternary Operator,我正在尝试使用此函数(运行): 并尽可能地简化它。具体来说,我试图在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

我正在尝试使用此函数(运行):

并尽可能地简化它。具体来说,我试图在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
作为三元
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

不能对三值运算符使用
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的内置函数会更简单(而且速度会更快):

def shift_on_character(string, char):
    try:
        index = string.lower().index(char.lower())
        string = string[index:] + string[:index]
    except ValueError:
        pass
    return list(string)
使用Python的内置函数会更简单(而且速度会更快):

def shift_on_character(string, char):
    try:
        index = string.lower().index(char.lower())
        string = string[index:] + string[:index]
    except ValueError:
        pass
    return list(string)

不能将
break
与三值运算符一起使用。不能将
break
与三值运算符一起使用。此解决方案会产生类型错误(TypeError:NoneType和str的操作数类型不受支持)。是的,我意识到我已将
&
放在那里,并将其更改为
,可与任何类型一起使用。尽管如此,@donkopotamus的解决方案要好得多。这个解决方案给出了一个类型错误(TypeError:unsupported operation type for&:'NoneType'和'str')是的,我意识到我把
&
放在那里了,并把它改成了
,它不支持任何类型。不过,@donkopotamus的解决方案要好得多。谢谢你的帮助!谢谢你的帮助!