为什么这个程序的相等值不能打印?

时间:2016-04-13 23:31:58

标签: python list comparison

我创建了两个函数,一个将返回列表列表:列表中的第一个元素包含出现在字符串集合中的字母列表,第二个元素包含其计数列表。第二个是遍历从第一个函数返回的列表列表,找到最大计数并将其作为变量large返回。我试图将第一个函数返回的字母数与第二个函数返回的最大数字进行比较,以打印相等的值。由于某种原因,相同的值不打印,我不知道为什么?有人能指出我正确的方向吗?

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.

1 个答案:

答案 0 :(得分:0)

问题是你没有在int n; fread(&n, 4, 1, file); 中初始化// if the file is big endian: m = be32toh(n); // if the file is little endian: m = le32toh(n); ,因此每次调用它时都会添加全局array变量中的计数(你没有显示,但它显然必须存在或你会得到一个错误)。你应该使用一个局部变量。

mkdict()

此外,每次致电array时,都不应致电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 。计数不会改变,因此您应该只调用一次,将结果保存在变量中,并将其传递给mkdict()

lar()

实际上,反复调用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