我有一个字符串列表,并希望使用各种不同的运算符来挑选满足我条件的字符串。
下面的示例代码为我提供了我正在寻找的答案:
strings = ['abc','bcd','cde','dea', 'eab']
for string in strings:
if 'a' in string and not 'b' in string and ('ea' not in string or 'd' in string):
print(string)
>> dea
但是,这段代码要求我在字符串中写出'多次,看起来很乱,并且在引用许多条件时需要时间。
我想知道是否有一种方法可以压缩代码以显示所有操作符都在搜索-in string -
我认为语法看起来像:
strings = ['abc','bcd','cde','dea', 'eab']
for string in strings:
if ('a' and not 'b' and ('ea' not or 'd')) in string:
print(string)
但是当我尝试这个时,我得到一个SyntaxError。
是否有一种压缩代码的pythonic方法?
答案 0 :(得分:2)
最Pythonic方法是让您的代码尽可能具有可读性和表现力。在您的情况下,我会使用两个if
语句:
for string in strings:
if 'a' in string and 'b' not in string:
if 'ea' not in string or 'd' in string:
print(string)
dea
答案 1 :(得分:1)
您可以使用eval()来评估这样的表达式:
for string in strings:
if eval("'a' {0} and not 'b' {0} and ('ea' not {0} or 'd' {0})".format("in string")):
print(string)
答案 2 :(得分:1)
您可以使用函数使if语句更容易阅读。只要将函数定义保留在if语句附近,就可以了。
strings = ['abc','bcd','cde','dea', 'eab']
def ye(c): return c in string
def no(c): return c not in string
for string in strings:
if ye('a') and no('b') and (no('ea') or ye('d')):
print(string)
答案 3 :(得分:0)
strings = ['abc','bcd','cde','dea', 'eab']
for string in strings:
if 'a' in string and 'b' not in string:
if 'd' not in string or 'ea' in string:
print(string)
答案 4 :(得分:0)
您可以使用正则表达式,但它不太可读:
import re
reg=re.compile(r"(?=.*a.*)(?!.*b.*)(?:(?!.*ea.*)|(?=.*d.*))\w+")
for string in strings:
mo=reg.fullmatch(string)
if mo:
print(mo.group())