2024-10-04 03:27:21 发布
网友
我有一个列表列表,需要找到一种方法来找到每个列表中元素[0]的数值部分的最大值。我知道这将涉及切片和查找max,并认为它将涉及zip(*L)函数,但不知道如何实现。例如,我的列表如下:
[0]
zip(*L)
L = [['ALU-001', 'Aluminum', 50], ['LVM-002', 'Livermorium', 20], ['ZIN-003', 'Zinc', 30]]
需要找到第一个元素的最大数值部分(例如001)。你知道吗
您可以使用zip(*L)解压,因为数字比较与按字母顺序比较相同,所以如果数字具有固定宽度,则不必将数字部分转换为int。你知道吗
>>> max([i.split('-')[1] for i in zip(*L)[0]]) '003'
zip是它自己的补充!你知道吗
zip
L = [['ALU-001', 'Aluminum', 50], ['LVM-002', 'Livermorium', 20], ['ZIN-003', 'Zinc', 30]] zip(*L)[0] #=> ('ALU-001', 'LVM-002', 'ZIN-003')
不过,没必要在这里拉拉链。相反,大多数python sort/max/etc.函数采用key参数:
key
max(L,key=lambda (a,b,c):int(a.split('-')[1])) #=> ['ZIN-003', 'Zinc', 30]
max函数考虑通过将key应用于L的每个元素而生成的值。你知道吗
max
L
max(int(subl[0].rsplit('-',1)[1]) for subl in L)
这将返回3。如果要打印'003',则可以执行以下操作:
3
'003'
print "%03d" %max(int(subl[0].rsplit('-',1)[1]) for subl in L)
解释:
您似乎已经知道,max获取一个数字列表并返回最大的一个。这几乎是正确的:max接受任何可交互的并返回最大的元素。生成器是一个iterable,占用O(1)个空间,而list则占用O(n)个空间。 您还可以使用列表理解来创建生成器(称为生成器理解),这就是我所做的。你知道吗
(int(subl[0].rsplit('-',1)[1]) for subl in L)
同:
def myGen(): for subl in L: elem = subl[0] myNum = elem.rsplit('-', 1) myNum = int(myNum) yield myNum max(myGen)
subl迭代迭代L的子列表。subl[0]获取每个子列表的第0个元素。然后我们调用rsplit('-' ,1),它在字符串末尾出现第一个-时将字符串拆分为两部分;拆分显示在一个列表中。这个列表的第0个索引是-左边的索引,第1个索引是右边的索引。因为数字在右边,所以我们取subl[0].rsplit('-',1)[1]。 此时,我们只有字符串'003',为了max的目的,我们想把它转换成int。所以我们称之为int(subl[0].rsplit('-',1)[1])。这就是它如何生成所有所需的数字,然后max从中取出最大的一个
subl
subl[0]
rsplit('-' ,1)
-
subl[0].rsplit('-',1)[1]
int
int(subl[0].rsplit('-',1)[1])
您可以使用zip(*L)解压,因为数字比较与按字母顺序比较相同,所以如果数字具有固定宽度,则不必将数字部分转换为int。你知道吗
zip
是它自己的补充!你知道吗不过,没必要在这里拉拉链。相反,大多数python sort/max/etc.函数采用
key
参数:max
函数考虑通过将key
应用于L
的每个元素而生成的值。你知道吗这将返回
3
。如果要打印'003'
,则可以执行以下操作:解释:
您似乎已经知道,
max
获取一个数字列表并返回最大的一个。这几乎是正确的:max
接受任何可交互的并返回最大的元素。生成器是一个iterable,占用O(1)个空间,而list则占用O(n)个空间。您还可以使用列表理解来创建生成器(称为生成器理解),这就是我所做的。你知道吗
同:
subl
迭代迭代L
的子列表。subl[0]
获取每个子列表的第0个元素。然后我们调用rsplit('-' ,1)
,它在字符串末尾出现第一个-
时将字符串拆分为两部分;拆分显示在一个列表中。这个列表的第0个索引是-
左边的索引,第1个索引是右边的索引。因为数字在右边,所以我们取subl[0].rsplit('-',1)[1]
。此时,我们只有字符串
'003'
,为了max
的目的,我们想把它转换成int
。所以我们称之为int(subl[0].rsplit('-',1)[1])
。这就是它如何生成所有所需的数字,然后max
从中取出最大的一个相关问题 更多 >
编程相关推荐