我是python新手,遇到了一个我无法解决的问题。在
我有以下二维数组:
valuearray = [['A', '21', '45'], ['A', '12', '23'],
['A', '54', '21'], ['A', '15', '54'],
['B', '23', '53'], ['B', '34', '53'],
['B', '32', '54'], ['B', '24', '13'],
['C', '31', '43'], ['C', '42', '54'],
['C', '35', '54'], ['C', '12', '11']]
A 21 45
A 12 23
A 54 21
A 15 54
B 23 53
B 34 53
B 32 54
B 24 13
C 31 43
C 42 54
C 35 54
C 12 11
我需要从这个数组生成另一个数组,它的唯一值是valuearray[0]
,每个valuearray[0]
的最大值为valuearray[1
],每个valuearray[0]
的最小值为{
结果是:
^{pr2}$编辑:很抱歉没有展示我尝试过的内容
uniquenames = []
un = []
for i in range(len(valuearray)):
un.append(valuearray[i][0])
uniquenames=uniq(un)
test = []
for ci in range(len(valuearray)):
for gn in range(len(uniquenames)):
if(valuearray[ci][0] == uniquenames[gn]):
# i don't know what to do here
i tried append(valuearray[ci][0] , max(valuearray[ci][1]),min( valuearray[ci][2]))
但是append只需要一个参数,所以我不知道如何继续。在
uniq是一个函数,它给我一个列表中唯一的值。在
我们可以很容易地用^{} 和^{} :
我们在这里所做的是使用
groupby()
将列表项按第一项分组。这给了我们三个列表-一个是以a开头的记录的列表,然后是一个B的列表,然后是C。还值得注意的是,groupby()
不需要对列表进行排序。在然后,我们使用
zip()
将三元组列表中的值解压缩为三个单值列表,从而从这些列表中提取值。我们丢弃第一列,因为它只是相关的A、B或C,然后取其他列的最大值和最小值来获得所需的值。在这给了我们:
^{pr2}$编辑:
如果将值作为文本,则可以使用list comprehension和^{} 从中列出:
另一个编辑:
根据聊天内容,您可以丢弃额外的列,如下所示:
Python 3.x版:
Python 2.x版:
要使输出成为列表,而不是打印值:
我们只需使用一个列表理解和一个生成器(我们可以在一个大行中完成这项工作,但这将是笨拙和不可读的)。这给了我们:
相关问题 更多 >
编程相关推荐