She*_*gla 4 python boolean list-comprehension
r=[True, False,True,False, False]
print([i for i in r if str(r[i])=="True"])
Run Code Online (Sandbox Code Playgroud)
此代码给出以下意外结果:[False,False,False]
为什么这是行为?我希望:[True,True]
Jac*_*din 11
i是一个值为True或的布尔值False.如果你将它用作索引r[i],你将获得r[0]或者r[1]因为bool是它的子类int.
你能想象它r[int(i)]和int(True) == 1,int(False) == 0.
你的意思是:
print([i for i in range(len(r)) if str(r[i])=="True"])
Run Code Online (Sandbox Code Playgroud)
其中i是整数或:
print([i for i in r if str(i)=="True"])
Run Code Online (Sandbox Code Playgroud)
i布尔值在哪里.
请注意,如果i是布尔值,则没有什么意义if str(i) == "True".更简洁的写作方式是:
print([i for i in r if i])
Run Code Online (Sandbox Code Playgroud)
甚至使用过滤器内置功能:
it = filter(None, r)
print(list(it))
Run Code Online (Sandbox Code Playgroud)