Python 如何得到最大值函数的所有最大值
max函数只返回一个字符串。Python 如何得到最大值函数的所有最大值,python,max,Python,Max,max函数只返回一个字符串。如何使它同时返回两个字符串? 两个字符串的长度相等,因此max应该返回两个字符串,但它只返回一个,因此有办法返回所有max项。您可以将其作为列表编写: max('str','frt',key=len) 根据定义,max函数返回最大值。它不返回项目,只返回唯一的值(即使有多个项目具有相同的最大值)。 我建议您使用排序算法并获取所需的任何值 在您的示例中: data = ['str', 'frt'] maxlen = max(map(len, data)) result
如何使它同时返回两个字符串?
两个字符串的长度相等,因此max应该返回两个字符串,但它只返回一个,因此有办法返回所有max项。您可以将其作为列表编写:
max('str','frt',key=len)
根据定义,max函数返回最大值。它不返回项目,只返回唯一的值(即使有多个项目具有相同的最大值)。 我建议您使用排序算法并获取所需的任何值 在您的示例中:
data = ['str', 'frt']
maxlen = max(map(len, data))
result = [s for s in data if len(s) == maxlen]
下面是一个简单的函数,它一次完成这一任务:
data = ['str','frt']
sorted(data,key=len, reverse=True)
result = [s for s in data if len(s)==len(data[0])]
在行动中:
def maxes(a, key=None):
if key is None:
key = lambda x: x
m, max_list = key(a[0]), []
for s in a:
k = key(s)
if k > m:
m, max_list = k, [s]
elif k == m:
max_list.append(s)
return m, max_list
这可能比运行其他海报提到的列表理解更快,也可能不会比排序更快。。。但一点测试表明其速度更快:
有关字符串的示例:
In [11]: maxes(['a', 'ab', 'a', 'cd'], key=len)
Out[11]: (2, ['ab', 'cd'])
什么意思?你的问题令人困惑。你能给出一个更好的例子,并展示你想要的输出吗?这可能是相关的:你可能不能,你必须编写你自己的函数。
'str'
'frt'
,那么为什么你会期望这两个值?@KarlKnechtel len('str')==len('frt')排序比max需要更多的时间,我想不会太多。就复杂性而言,排序是伪线性的,其中max是线性的,这或多或少是等价的。一旦分类,你可以在数据上做很多很酷的事情,比如查找第二个最大值、最小值、二进制搜索。。。。当然,这取决于您的需要。我添加了一些timeit信息,正如上面所建议的,对于大型数据集,排序速度明显较慢。我不明白在这里使用max实现了什么排序。。。您似乎将其用作效率较低的最大值,因此-1.如果不将结果赋值,则调用sorted
不会产生任何效果。你的意思是要使用sort()
?注意:maxlen的计算必须超出列表理解范围(因此只调用一次)。此外,在第二行中使用max(a,key=len)
比max.map更具pythonic风格(速度稍快)。@yhayden在这种情况下,maxlen
将是实际的字符串,而不是3,因此,您必须再次调用len
以获取长度。在这里这样做似乎更合适。
In [20]: a = [''.join(random.choice('abc') for _ in xrange(random.randint(1, 100)))
for i in xrange(1000)]
In [21]: %timeit maxes(a, key=len)
10000 loops, best of 3: 53 µs per loop
In [22]: %timeit m = max(map(len, a)); [s for s in a if len(s) < m]
10000 loops, best of 3: 104 µs per loop
In [23]: %timeit sorted_a = sorted(a, key=len, reverse=True); [s for s in a if len(s) == len(sorted_a[0])]
1000 loops, best of 3: 322 µs per loop
In [30]: a = [random.randint(1, 10000) for i in xrange(1000)]
In [31]: %timeit maxes(a, key= lambda x: x**2)
10000 loops, best of 3: 150 µs per loop
In [32]: %timeit m = max(a, key=lambda x: x**2); [s for s in a if s**2 < m]
1000 loops, best of 3: 183 µs per loop
In [33]: %timeit sorted_a = sorted(a, key=lambda x: x**2, reverse=True); [s for s in a if s ** 2 == sorted_a[0] ** 2]
1000 loops, best of 3: 441 µs per loop
In [34]: %timeit maxes(a)
10000 loops, best of 3: 98.1 µs per loop
In [35]: %timeit m = max(a); [s for s in a if s < m]
10000 loops, best of 3: 49.2 µs per loop
In [36]: %timeit sorted_a = sorted(a, reverse=True); [s for s in a if s == sorted_a[0]]
10000 loops, best of 3: 152 µs per loop
In [37]: %timeit maxes2(a)
10000 loops, best of 3: 39.7 µs per loop