在if循环中使用数组作为条件

2024-09-29 05:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python是全新的,对一般的编码也是相当陌生的,所以请耐心听我说。你知道吗

我正在尝试执行for循环:

for numi,i in enumerate(v1):
   for numj,j in enumerate(v1):
       angle=(np.arccos(np.dot(i,j))/(np.linalg.norm(i)*np.linalg.norm(j))))*180/(np.pi)
       print(angle)

但是我想添加一个条件,循环跳过与两个不同数组的任何元素匹配的任何值或ij

ala=[i for i,x in enumerate(resname) if x=='ALA']
gly=[i for i,x in enumerate(resname) if x=='GLY']

其中包含

[0, 9, 14, 45, 56, 72, 87, 101, 102, 126, 145]`

以及

[22, 24, 32, 39, 58, 60, 95, 97, 112, 130, 132]`

我尝试使用一个条件if语句,使用'continue',但是我不知道正确的语法来让它识别数组中的ij==任何元素

像这样的

for numi,i in enumerate(v1):
   if i==ala or i==gly:
       continue
   else:
       for numj,j in enumerate(v1):
           if j==ala or j==gly:
               continue
           else:
               angle=(np.arccos(np.dot(i,j))/(np.linalg.norm(i)*np.linalg.norm(j))))*180/(np.pi)
               print(angle)

除了那些真正有效的代码


Tags: innormforifnpv1continueangle
1条回答
网友
1楼 · 发布于 2024-09-29 05:18:05

您可以使用any内置函数:

给出:

v1 = [[-2.736, -0.466, -2.248], [-3.373, -2.93, -1.288], [-0.765, -3.666, 1.123], [-1.269, 1.882, 1.073], [3.444, 1.159, -3.183], [3.339, 2.289, 0.759], [-4.057, 2.649, -0.189], [0.317, 1.196, -3.699], [0.0, 0.0, 0.0]]
for numi,i in enumerate(v1):
   if any(v in ala or v in gly for v in i):
       continue
   else:
       for numj,j in enumerate(v1):
           if any(v in ala or v in gly for v in j)::
               continue
           else:
               angle=(np.arccos(np.dot(i,j))/(np.linalg.norm(i)*np.linalg.norm(j))))*180/(np.pi)
               print(angle)

相关问题 更多 >