Python程序提供了一系列的项,而不是最频繁/最不频繁的项

2024-09-24 22:20:56 发布

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

我已经使用wxFormBuilder创建了一个GUI,它应该允许用户在列表中输入“业务访问者”的名称,然后单击两个按钮中的一个返回业务中最频繁和最不频繁的访问者。不幸的是,当我点击按钮时,它给出了访问者的范围,而不是最常/最不常访问的访问者的名字。我已经附上了一个屏幕截图的图形用户界面,我已经创建了帮助增加一点清晰度的问题,并附加了我的代码。提前感谢你的帮助。你知道吗

enter image description here

代码:

import wx
import myLoopGUI

class MyLoopFrame(myLoopGUI.MyFrame1):
    def __init__(self, parent):
        myLoopGUI.MyFrame1.__init__(self, parent)

    def clkAddData(self,parent):
        if len(self.txtAddData.Value) != 0:
            try:
                myname = str(self.txtAddData.Value)
                self.listMyData.Append(str(myname))
            except:
                wx.MessageBox("This has to be a name!")            
        else:
            wx.MessageBox("This can't be empty")




    def clkFindMost(self, parent):
        word_amount = range(self.listMyData.GetCount())
        numberofitems = self.listMyData.GetCount()
        unique_words = []
        for word in word_amount:
                if word not in unique_words:
                    unique_words += [word]
        word_frequencies = []
        for word in unique_words:
            word_frequencies += [float(word_amount.count(word))/len(word_amount)]

        max_index = 0
        frequent_words =[]
        for i in range(len(unique_words)):
            if word_frequencies[i] >= word_frequencies[max_index]:
                max_index = i
                frequent_words += [unique_words[max_index]]
        self.txtResults.Value = str(frequent_words)



myApp = wx.App(False)
myFrame = MyLoopFrame(None)
myFrame.Show()
myApp.MainLoop()

@是的,我很好心插嘴,提供了另一条前进的道路:

import wx
import myLoopGUI
import commands

class MyLoopFrame(myLoopGUI.MyFrame1):
    def __init__(self, parent):
        myLoopGUI.MyFrame1.__init__(self, parent)

    def clkAddData(self,parent):
        if len(self.txtAddData.Value) != 0:
            try:
                myname = str(self.txtAddData.Value)
                self.listMyData.Append(str(myname))
            except:
                wx.MessageBox("This has to be a name!")            
        else:
            wx.MessageBox("This can't be empty")




    def clkFindMost(self, parent):
        self.listMyData = []
        unique_names = set(self.listMyData)
        frequencies = {}
        for name in unique_names:
            if frequencies.get[name]:
                frequencies[name] += 1
            else:
                frequencies[name] = 0

        v = list(frequencies.values())
        k = list(frequencies.keys())
        self.txtResults.Value = k.index(max(v))


    def clkFindLeast(self, parent):
        unique_names = set(self.listMyData)
        frequencies = {}
        for name in unique_names:
            if frequencies.get(name):
                frequencies[name] += 1
            else:
                frequencies[name] = 0

        v = list(frequencies.values())
        k = list(frequencies.keys())
        self.txtResults.Value = k.index(min(v))

myApp = wx.App(False)
myFrame = MyLoopFrame(None)
myFrame.Show()
myApp.MainLoop()

但现在我收到一个值错误:

ValueError:max()arg是空序列

关于该行:

**self.txtResults.Value = k.index(max(v))**

没关系!@是的,我提供了一个极好的解决方案。非常感谢。你知道吗


Tags: nameselfindexifvaluedefmaxword
1条回答
网友
1楼 · 发布于 2024-09-24 22:20:56
range(self.listMyData.getCount())

将给出从0self.listMyData.getCount()的整数列表。你知道吗

您想统计self.listMyData中每个唯一项的出现次数是吗?你知道吗

更新:从注释中,self.listMyData是文本框,而不是名称列表,从文本框中获取名称列表,如this answer所示。更新的代码。你知道吗

# Get the list of names from the textbox
name_list = self.listMyData.GetStrings()
unique_names = set(name_list)
frequencies = {}
for name in unique_names:
    if frequencies.get(name):
        frequencies[name] += 1
    else:
        frequencies[name] = 0

现在frequencies将是名称的dict,其值是该名称在self.listMyData中的频率

然后你可以做:

counts = list(frequencies.values())
names = list(frequencies.keys())
max_count_index = counts.index(max(counts))
min_count_index = counts.index(min(counts))
most_frequent = names[max_count_index]
least_frequent = names[min_count_index]

它将给counts分配一个整数列表,表示names中每个名称的频率。获取counts中最大值和最小值的索引告诉我们names中的索引分别具有最频繁和最不频繁的名称。然后我们可以用正常的方式访问它们。你知道吗

相关问题 更多 >