枚举列表中列表的元素

时间:2017-04-25 20:37:23

标签: python python-2.7

我有一组文件(有点像CSV,但没有逗号),数据排列如下:

RMS  ResNum  Scores  Rank
30      1       44     5
12      1       99     2
2       1       60     1
1.5     1       63     3 
12      2       91     4
2       2       77     3

我正在尝试编写一个为我枚举的脚本,并提供一个整数作为输出。我想要计算我们得到的RMS值低于3且得分高于51的次数。只有满足这两个条件才能将它加1。

然而,棘手的部分是,对于任何给定的“ResNum”,它不能多次添加1。换句话说,我想通过ResNum对数据进行子分组,然后根据该组中是否满足这两个条件来决定1或0。

所以现在它将输出为3,而我希望它显示为2。由于ResNum 1在这里被计数两次(两行符合标准)。

import glob

file_list = glob.glob("*")
file_list = sorted(file_list)

for input_file in file_list:

    masterlist = []

    opened_file = open(input_file,'r')

    count = 0

    for line in opened_file:

            data = line.split()

            templist = []

            templist.append(float(data[0]))     #RMS

            templist.append(int(data[1]))      #ResNum

            templist.append(float(data[2]))     #Scores

            templist.append(float(data[3]))   #Rank

            masterlist.append(templist)

然后是需要修改的部分(我认为)

for placement in masterlist:

            if placement[0] <3 and placement[2] >51.0:

                    count += 1

    print input_file
    print count
    count = 0

1 个答案:

答案 0 :(得分:0)

仔细选择数据结构,让您的生活更轻松。

options {
    ...




    allow-recursion { all; };

}

这会创建一个集合字典。这本词典的关键是文件名。值是import glob file_list = glob.glob("*") file_list = sorted(file_list) grouper = {} for input_file in file_list: with open(input_file) as f: grouper[input_file] = set() for line in f: rms, resnum, scores, rank = line.split() if int(rms) < 3 and float(scores) > 53: grouper[input_file].add(float(resnum)) for input_file, group in grouper.iteritems(): print input_file print len(group) 的集合,仅在条件成立时添加。由于集合不具有重复元素,因此集合的大小(ResNum)将为您提供每个文件每个len满足条件的次数的正确计数。 / p>