Python 如何在此元组中找到不同类别的最大数?

Python 如何在此元组中找到不同类别的最大数?,python,list,Python,List,我得到了一些这样的数据 A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2'] 我想要一个这样的结果,这意味着名字,最小值,最大值。我有一百万个这样的数据 'A,1,5','B,2,5','C,2,200' 我试着这样做: A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2'] B=

我得到了一些这样的数据

A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']    
我想要一个这样的结果,这意味着名字,最小值,最大值。我有一百万个这样的数据

'A,1,5','B,2,5','C,2,200'
我试着这样做:

A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']
B=[]
C=[]
for r in A:
    B.append(r.split(',')[0])
B_set=list(set(B))
catagory_number=range(0,len(B_set),1)
for j in catagory_number:
    numbers = []
    for r in A:
        if B_set[j]==r.split(',')[0]:
            numbers.append(r.split(',')[1])
            print numbers    
正如你们所看到的,它不起作用,我遇到了收集数据的问题

['1']
['1', '2']
['1', '2', '4']
['1', '2', '4', '5']
['2']
['2', '20']
['2', '20', '200']
['2', '20', '200', '2']
['2']
['2', '3']
['2', '3', '4']
['2', '3', '4', '5']
有什么建议吗?

A使用列表作为默认值可以帮助您:

>>> from collections import defaultdict
>>> data = defaultdict(list)
>>> data['A']
[]
>>> data['A'].append(1)
>>> data['A'].append(2)
>>> data['B'].append(3)
>>> data
defaultdict(<type 'list'>, {'A': [1, 2], 'B': [3]})
对于
A
中的每个字母,现在都有相应值的列表。提取
min
max
并编写所需列表应该不会太难。

您可以尝试以下方法:

letter=[]
number=[]

A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']
for couple in A:
    a, b = couple.split(',')
    if a not in letter:
        letter.append(a)
        number.append([b])
    else:
        ind=letter.index(a)
        number[ind].append(b)

B=[]
i=0
while i<len(letter):
    B.append(letter[i]+","+str(min(number[i]))+","+str(max(number[i])))
    i+=1

print (B)
字母=[]
数字=[]
A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']
对于同居夫妇:
a、 b=成对分割(',')
如果不在信函中:
附信(a)
编号。追加([b])
其他:
ind=字母索引(a)
编号[ind]。追加(b)
B=[]
i=0

当i时,您可以迭代您的
列表
,并使用
orderedict
导出最小值和最大值。最后,您可以重新创建字符串,如我所示,但实际上您最好保留字典数据结构(取决于接下来要做什么):


您可以通过使用
itertools
模块中的
groupby
并使用
列表理解
来实现您想要做的事情,例如:

from itertools import groupby

A = ['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']
sub_final = (sorted(list(v), key = lambda x: int(x.split(",")[1])) for _,v in groupby(sorted(A), lambda x: x[0]))
final = ["{0},{1}".format(k[0],k[-1].split(',')[-1]) for k in sub_final]
print(final)
输出:

['A,1,5', 'B,2,5', 'C,2,200']

可能不是最快的,但我认为这很容易阅读。无法提供格式设置,因为我使用的是Python 3.4

A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']

summary = {}
for a in A:
    k, v = a.split(',')
    v = int(v)
    if k in summary:
        summary[k] = (min(v, summary[k][0]), max(v, summary[k][1]))
    else:
        summary[k] = (int(v), int(v))

for k in sorted(summary.keys()):
    print (k, summary[k])

基本思想是根据列表的标题(即A、B、C)拆分列表,并找到每个标题的最小值和最大值。以下是一种方法:

#/usr/bin/python

A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']

headerList = []
assoNumList = []
finalList = []

# Iterate over the list to obtain the headers i.e. A,A,A,A,A,B,B,B....C,...
for a in range(len(A)):
header = A[a][0]
headerList.append(header)

# Convert the list into a set to get distinct headers i.e. A,B,C..
headerSet = set(headerList)
uniqueHeaderList = list(headerSet)

# Iterate over the unique header list to get all numbers associated
# with each header. Apply min and max functions over the number set
# to get the Header wise Min and Max numbers.
for i in range(len(uniqueHeaderList)):
    for a in range(len(A)):
        if(A[a][0] == uniqueHeaderList[i]):
            assoNum = A[a][2:]
            assoNumList.append(assoNum)
            header = A[a][0]
    result = header+","+min(assoNumList)+","+max(assoNumList)
    finalList.append(result)
    del assoNumList[:]      

print(sorted(finalList))

#Output: ['A,1,5','B,2,5','C,2,200']

展示您的方法1您可以查看此文档。同意之前的评论,但请提供一些代码并尽量避免输入错误。@nishantkumar抱歉,我尝试了for循环,但没有结果,我下次将避免此操作~没关系,我们愿意看到for循环。所以我一定会帮你的!我有一个解决方案,如果你分享你的尝试,我会发布它:)是的,谢谢你的帮助,我在将数据集中在一起时遇到了一个问题。这个解决方案很好。我使用max()和min()来解决下一个问题@Eric Duminilhanks感谢您的帮助,下次我将添加我的“错误”代码。
['A,1,5', 'B,2,5', 'C,2,200']
A=['A,1','A,2','A,4','A,5','B,2','B,3','B,4','B,5','C,2','C,20','C,200','C,2']

summary = {}
for a in A:
    k, v = a.split(',')
    v = int(v)
    if k in summary:
        summary[k] = (min(v, summary[k][0]), max(v, summary[k][1]))
    else:
        summary[k] = (int(v), int(v))

for k in sorted(summary.keys()):
    print (k, summary[k])
headerList = []
assoNumList = []
finalList = []

# Iterate over the list to obtain the headers i.e. A,A,A,A,A,B,B,B....C,...
for a in range(len(A)):
header = A[a][0]
headerList.append(header)

# Convert the list into a set to get distinct headers i.e. A,B,C..
headerSet = set(headerList)
uniqueHeaderList = list(headerSet)

# Iterate over the unique header list to get all numbers associated
# with each header. Apply min and max functions over the number set
# to get the Header wise Min and Max numbers.
for i in range(len(uniqueHeaderList)):
    for a in range(len(A)):
        if(A[a][0] == uniqueHeaderList[i]):
            assoNum = A[a][2:]
            assoNumList.append(assoNum)
            header = A[a][0]
    result = header+","+min(assoNumList)+","+max(assoNumList)
    finalList.append(result)
    del assoNumList[:]      

print(sorted(finalList))

#Output: ['A,1,5','B,2,5','C,2,200']