Проблема с подсчетом количества вхождений элемента списка

#python

#python

Вопрос:

По какой-то причине я не могу подсчитать количество вхождений элемента в списке. Первые три функции необходимы для генерации некоторых данных, и я смотрю на функцию distribution() , в которой у меня проблема. Список, на который я смотрю finalstate , т.Е. Я не получаю правильное значение для переменной c . Например, как показано ниже, я подсчитываю количество вхождений [0,0,0] in finalstate , и это должно быть 1 , и я получаю 0 . Могу ли я узнать, где я ошибся?

Вывод:

     finalstate:  [[1, 0, 0], [1, 1, 1], [0, 0, 1], [1, 1, 1], [0, 0, 1], [0, 1, 1], [1, 0, 0], [0, 0, 0], [1, 1, 0], [1, 0, 0]]
    key:  [0, 0, 0]
    c:  0
   
  

Код:

     def generateAllBinaryStrings(n, arr, l, i):  

        if i == n: 
            l.append(arr[:]) 
            return

        arr[i] = 0
        generateAllBinaryStrings(n, arr, l, i   1)  

        arr[i] = 1
        generateAllBinaryStrings(n, arr, l, i   1)  

        return l

    
    def dictionary(v):
        d={}
        for i in range(len(v)):
            d[str(v[i])]=[]
            temp=[]
            for j in range(n):
                temp=v[i][:]
                if v[i][j]==1:
                    temp[j]=0
                else:
                    temp[j]=1
                d[str(v[i])].append(temp)
        return d

    
    def srw(d,n,t):
        h=[[0 for i in range(n)]]
        w=[1/(2*n) for i in range(n)]
        w.append(0.5)
        for i in range(t):
            temp=d[str(h[-1])][:]
            temp.append(h[-1])
            h.append(random.choices(temp,weights=w)[-1])

        return h

    
    def distribution(d,n,t,num):
        finalstate=[]
        for i in range(num):
            temp=srw(d,n,t)
            finalstate.append(temp[-1])
        print(finalstate)
        Xt={}
        for key in d:
            c=finalstate.count(list(key))
            print(c)
            Xt[str(key)]=c/num
        for key in d:
            if key not in Xt:
                Xt[key]=0

        return Xt

    import numpy as np
    import matplotlib.pyplot as plt
    import random
    import collections as cs

    time=40
    numsim=10

    #for n in range(5,11,5):
    n=3
    l = []  
    arr = [None] * n 
    vertices=generateAllBinaryStrings(n, arr, l, 0)
    d=dictionary(vertices)
    dist=distribution(d,n,time,numsim)
  

Ответ №1:

Это key строка, и вы ищете список.

Попробуйте этот код:

 c=finalstate.count(eval(key))  # convert string to list