Хранение значений в списке Python - PullRequest
0 голосов
/ 18 марта 2020

В моей программе ниже я использовал функцию append () для сохранения энтропии в списке. У меня в программе 36 диалогов, и я хочу сохранить энтропию одного диалога в списке, а затем обновить значения в той же переменной для вторых диалогов и для энтропии третьего диалога также обновить значения в том же списке.

Но функция append () добавит все энтропии для всех диалогов в списке, но не обновит значения.

Моя программа находится ниже:

import numpy as np
import csv
from scipy.stats import entropy
from math import log10
import statistics
import matplotlib.pyplot as plt


store_entropy = []
critical_entropy = 0
position = 0
outputfile = open("Output.txt","w")
with open('data.csv', 'r') as file:
    reader = csv.reader(file)
    for line in reader:
        lines = filter(None, line[2:])
        lines1 = ' '.join(lines).split(',')

        for row in lines1[::]:
            makeOneLine = row.rstrip('\n')
            delimiter = " "
            makeOneLine = delimiter.join(makeOneLine.split(delimiter, 3))
            numpyArraysDisplay = np.array(list(makeOneLine.split(" ")))
            print(numpyArraysDisplay)
            outputfile.write(str(numpyArraysDisplay) + '\n')

        #Loop for first segment
            for x in range(0, numpyArraysDisplay.size):
                part1 = numpyArraysDisplay[:x + 1]  # First segment divide
                strings, counts = np.unique(part1, return_counts=True)
                CountWordsfrequency = np.array(list(dict(zip(strings, counts)).values()))
                print(CountWordsfrequency)
                outputfile.write(str(CountWordsfrequency) + '\n')

                for y in range(0, CountWordsfrequency.size):
                    probability = CountWordsfrequency[y]/ part1.size
                    outputfile.write("Probability is \t" + str(probability) + '\n')
            ent2 = entropy(counts,base=10)
            outputfile.write("Entropy is \t" + str(ent2) + '\n')
            store_entropy.append(ent2)

Если я распечатываю список store_entropy, то он напечатает все значения в списке от первого диалога до последнего. Я хочу, чтобы первый диалог энтропии сохранялся в переменной, и когда l oop запускает второй раз, второй диалог энтропии обновляет первый, а не добавляет его.

Мой вывод:

[0.0, 0.30102999566398114, 0.4771212547196623, 0.4515449934959717,0.0,0.6179053239112496, 
 0.6135103844338377, 0.6097931356022916]

Ожидается :

[0.0, 0.30102999566398114, 0.4771212547196623, 0.4515449934959717]
[0.0, 0.6179053239112496,0.6135103844338377, 0.6097931356022916]

Скажите, пожалуйста, есть ли у кого-нибудь решение.

1 Ответ

0 голосов
/ 19 марта 2020

Я получил решение для вышеуказанной проблемы и получил ожидаемый результат с помощью кода ниже.

size = len(store_entropy)
idx_list = [idx for idx, val in enumerate(store_entropy) if val == 0.0]
res = [store_entropy[i: j] for i, j in zip([0] + idx_list, idx_list + ([size] if 
idx_list[-1] != size else []))]
# print(res)
res2 = [x for x in res if x != []]
print(res2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...