如何在同一行代码中使用 `if` 和 `for`? [复制]
Posted
技术标签:
【中文标题】如何在同一行代码中使用 `if` 和 `for`? [复制]【英文标题】:How use `if` and `for` in the same line of code? [duplicate] 【发布时间】:2021-10-03 12:25:46 【问题描述】:请看以下代码:
for l in range(len(cosine_scores)):
for s in range(len(skill_index)):
if l!=skill_index[s] :
if cosine_scores[l][skill_index[s]]>=0.80:
print(l)
如何在打印 l
之前以 if 条件满足所有 s
的方式重写此代码?
例如,如果我有
my_list=[[10,8],[8,,0,1,2,7],[6,15,8]]
for i in my_list:
for j in i:
if j>5: # I don't know what I should add here to say if this condition is true for all j in i.
print(i)
正确的输出应该是[10,8]
和[6,15,8]
。
【问题讨论】:
“在打印 l 之前满足所有 s 的条件”是什么意思?尝试用文字非常准确地描述这一点,而不必担心 python 语法。您是否希望skill_index
的每个元素都等于cosine_curves
的当前元素?
对于第二个示例,请查看 all()
函数。
【参考方案1】:
我通常用布尔值来解决这样的问题。
my_list=[[10,8],[8,0,1,2,7],[6,15,8]]
printIt = True
for i in my_list:
for j in i:
if j<5:
printIt = False
if printIt:
print(i)
else:
printIt = True
【讨论】:
【参考方案2】:一般情况
all
方法
all
如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True
for i in my_list:
if all(j > 5 for j in i):
print(i)
for/else
else
块仅被调用,因为在迭代期间没有使用 break
for i in my_list:
for j in i:
if not j > 5:
break
else:
print(i)
你的情况
for l in range(len(cosine_scores)):
for s in range(len(skill_index)):
if not (l != skill_index[s] and cosine_scores[l][skill_index[s]] >= 0.80):
break
else:
print(l)
---
for l in range(len(cosine_scores)):
if all(l != skill and cosine_scores[l][skill] >= 0.80 for skill in skill_index):
print(l)
【讨论】:
另一种选择,如果您的支票很小,而您的清单很大,那么可能更快的是相反的。有一个像bad=[0,1,2,3,4,5]
这样的“坏列表”,然后使用if any(x in good for x in bad): check=False
,然后使用if check: print(good)
--- 我并不是说这是理想的,但有时向后工作可以节省大量时间。特别是当你的“坏”列表相对较小时——你也可以只做if any(x in good for x in range(0,6)
——换句话说,这是循环遍历较小的列表而不是较大的列表(在某些情况下可能是 10k 行)跨度>
【参考方案3】:
在list comprehension 中使用all() 的单线解决方案:
result = [i for i in my_list if all(j > 5 for j in i)]
【讨论】:
【参考方案4】:您也可以使用布尔变量作为开关:
my_list=[[10,8],[8,,0,1,2,7],[6,15,8]]
for i in my_list:
ALLTRUE = True
for j in i:
if not j>5:
ALLTRUE = False
if ALLTRUE:
print(i)
【讨论】:
以上是关于如何在同一行代码中使用 `if` 和 `for`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果满足 for 循环中的条件,则在同一行中的其他单元格中获取值