jxn*_*jxn 2 python if-statement
我有3个列表:
a_exist = []
b_exist = []
c_exist = []
Run Code Online (Sandbox Code Playgroud)
我正在循环一个主要的字符串列表:
l = ['a', 'b']
for item in l:
if 'a' in item:
a_exist.append(1)
b_exist.append(0)
c_exist.append(0)
else:
a_exist.append(0)
b_exist.append(0)
c_exist.append(0)
if 'b' in item:
b_exist.append(1)
a_exist.append(0)
c_exist.append(0)
else:
b_exist.append(0)
a_exist.append(0)
c_exist.append(0)
Run Code Online (Sandbox Code Playgroud)
我想要得到的:
a_exist = [1,0]
b_exist = [0,1]
c_exist = [0,0]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
l = ['a', 'b']
a_exist = [1 if 'a' in i else 0 for i in l]
c_exist = [1 if 'b' in i else 0 for i in l]
b_exist = [1 if 'c' in i else 0 for i in l]
print(a_exist, b_exist, c_exist, sep='\n')
Run Code Online (Sandbox Code Playgroud)
出:
[1, 0]
[0, 1]
[0, 0]
Run Code Online (Sandbox Code Playgroud)
只需结合列表理解和条件赋值即可.首先循环l并获取每个值,然后检查值是否与条件匹配,如果值匹配,则返回1,否则返回0
作为对此的另一种看法,您的问题听起来可能更适合列表字典。这使得扩展很容易(例如,如果您想检测其他字符,只需将它们添加到checks下面的初始列表中),而不必_exist每次都添加一个新列表。
In [7]: checks = ['a', 'b', 'c', 'd', 'e']
In [8]: l = ['a', 'b', 'ae', 'bcd']
In [9]: ret = {k: [int(k in v) for v in l] for k in checks}
In [10]: ret
Out[10]:
{'a': [1, 0, 1, 0],
'b': [0, 1, 0, 1],
'c': [0, 0, 0, 1],
'd': [0, 0, 0, 1],
'e': [0, 0, 1, 0]}
Run Code Online (Sandbox Code Playgroud)