将列表中的每个项与列表中的其他项进行比较,检查它们是否属于定义的间隔

2024-10-04 11:25:06 发布

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

我有两个列表a和b,长度N相等,值在[0,1]之间。我要检查索引相同的两个列表中的每一对(a[0]与b[0],a[1]与b[1]等等),并根据它们的值,测量属于以下状态之一的成对的次数。在

列表中的每个元素都可以处于以下状态之一:

1)[0]

2)(0,0.1]

3)(0.1,0.2]

。。。。。在

11)(0.9,1)

12)[1]

我的问题是a或b的每一个元素都可以处于这12个状态中的一个,所以它们对有可能处于12*12=144个终态之一。在

配对状态<;-状态a和状态b

最终状态1<;-状态1和状态1

最终状态2<;-状态1和状态2

最终状态3<;-状态1和状态3

。。。。在

最终状态144<;-状态12和状态12

如果我只有一个列表,这个问题可以用一个简单的for循环和If/else语句来解决。我压缩了两个列表,但是组合太多,无法继续。在

有什么想法吗?在

举个例子,如果我有:

a=[0,0.1,0.25,0.1]

b=[1,0.1,0.4,0.05]

有144个定义了可能的状态对,所以从上面的4个中我们得到了

状态1和状态12=1(来自a[0]-b[0])

状态2&State 2=2(来自a[1]-b[1]和a[3]-b[3])

状态4和状态5=1(来自a[2]-b[2])


Tags: lt元素列表forif定义状态语句
2条回答

对于numpy版本,类似的机器没有显式循环。在

import numpy as np

a = [.11, .22, .33, .55]
b = [.16, .28, .38, .60]
Ind = (10*np.array([a,b])).astype(int)
State_mat = np.zeros((12,12),dtype=int)
State_mat[Ind[0],Ind[1]] = 1
State_mat.tolist()

输出相同

如果我没搞错,给定你的两个列表,你需要找出有多少“对”包含同一时间间隔内的项目。在

这里有一个小技巧你可以使用: 乘以10,然后使用int()去掉小数部分。在

a = [.11, .22, .33, .55]
b = [.16, .28, .38, .60]
pairs = 0

for (x, y) in zip(a, b):
    if int(x*10) == int(y*10):
        pairs += 1
print(pairs)

如果零本身就是一个状态,那么您需要调整我上面发布的内容来解释这个问题,因为int(0*10)和{}给出了完全相同的结果。在

以下是对这个问题的编辑:如果你有一个状态的“矩阵”,那么实际上可能有一个简单的方法来解决这个问题。在

^{pr2}$

这将创建一个12*12的表,并且对于每对表,都会增加它所属的“单元”。从这里,您需要提取对的数量,并在它们前面加上适当的“statex+statey”标签。在

最后注意:如果要将结果输出到控制台,则可能需要使用pprint模块。在

相关问题 更多 >