#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