为什么不打印此程序的等值?

Why are the equal values of this program not printing?

我正在创建两个函数,其中一个将 return 列表列表:列表中的第一个元素包含出现在字符串集合中的字母列表,第二个元素包含一个列表他们的计数。第二个是遍历第一个函数 returned 列表的列表,找到最大计数并将其 returning 作为变量 large。我正在尝试比较来自第一个函数的字母计数 returned 与来自第二个函数的最大数字 returned 以打印相等的值。出于某种原因,没有打印相等的值,我不确定为什么?有人能给我指出正确的方向吗?

def mkdict():
    """ This function is creating a dictionary of letters and their frequency."""

    for string in strings:
        for letter in string:
            if letter in array[0]:
                pos = array[0].index(letter)
                array[1][pos] = array[1][pos] + 1
            else:
                array[0].append(letter)
                array[1].append(1)
     return array
  # Printing this function returns: [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'z'], [5, 1, 2, 4, 1, 6, 3, 6, 1, 1, 1, 2, 4, 2, 3, 3, 3, 6]]

def getlar():
    list = mkdict()
    large = list[1][0]
    for item in list[1]:
        if item > large:
            large = item
    return large
    # Printing this function returns: 6.

for num in mkdict()[1]:
    if num == getlar():
        print num
# This loop should print : 6 three times but it isn't.

问题是你没有在 mkdict() 中初始化 array,所以每次你调用它时你都会添加到全局 array 变量中的计数(你没有't shown,但它显然必须存在,否则你会得到一个错误)。您应该使用局部变量。

def mkdict():
    """ This function is creating a dictionary of letters and their frequency."""
    array = []
    for string in strings:
        for letter in string:
            if letter in array[0]:
                pos = array[0].index(letter)
                array[1][pos] = array[1][pos] + 1
            else:
                array[0].append(letter)
                array[1].append(1)
     return array

另外,你不应该每次调用 lar() 都调用 mkdict()。计数不会改变,所以您应该只调用一次,将结果保存在一个变量中,然后将其传递给 getlar().

def getlar(list):
    large = list[1][0]
    for item in list[1]:
        if item > large:
            large = item
    return large

counts = mkdict()
for num in counts[1]:
    if num == getlar(counts):
        print num

实际上,重复调用getlar()也是不必要的,因为最大的不会改变。

counts = mkdict()
largest = getlar(counts)
for num in counts[1]:
    if num = largest:
        print num