1

如何获得元组元组中所有元素的最大值?

例子:

x = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0, 1, 10))
# want 10
4

5 回答 5

5

使用itertools.chainmax()

In [93]: from itertools import chain

In [94]: max(chain(*x))
Out[94]: 10

或使用chain.from_iterable

In [97]: max(chain.from_iterable(x))
Out[97]: 10

创建平面列表:

In [101]: list(chain.from_iterable(x))
Out[101]: [3, 4, 5, 4.5, 5.5, 6.5, -1, 0, 1, 10]

In [102]: list(chain(*x))
Out[102]: [3, 4, 5, 4.5, 5.5, 6.5, -1, 0, 1, 10]

与其他替代方法相比,这些itertools方法非常有效。

相关:在 Python 中展平一个浅表列表

于 2013-04-29T00:09:14.617 回答
5

如果你是一个为什么我可以自己做的时候导入的人,我建议:

>>> x = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0, 1, 10))
>>> max(max(t) for t in x)
10

要展平元组的元组:

>>> tuple(elem for t in x for elem in t)
(3, 4, 5, 4.5, 5.5, 6.5, -1, 0, 1, 10)

或者

>>> sum((t for t in x), ())
(3, 4, 5, 4.5, 5.5, 6.5, -1, 0, 1, 10)
于 2013-04-29T00:11:20.693 回答
3

另一种选择,沿着嵌套的 for 循环:

max(max(i) for i in x)
于 2013-04-29T00:10:57.863 回答
1

您可以使用嵌套for循环:

In [9]: max(n for s in x for n in s)
Out[9]: 10

为了展平任意嵌套的列表,您可以使用递归函数:

def flatten(lst):
    for item in lst:
        if isinstance(item, (tuple, list)):
            for result in flatten(item):
                yield result
        else:
            yield item
于 2013-04-29T00:08:00.633 回答
0

您可以将元组转换为包含所有元素的单个元组,然后对其进行迭代(或使用内置方法 max() )。这也回答了您关于如何“展平”元组的问题。

a_tuple = ((1, 2, 3), (5, 6, 7), (8, 9))

tuple_to_string = str(a_tuple)

转换成字符串后,去掉“(”、“)”和任何空格“”,然后使用join将其转换为单个列表,然后使用tuple()将其转换回元组。

altered_string = tuple_to_string.replace("(", "").replace(")", "").replace(" ", "")
>> "1,2,3,5,6,7,8,9"
flattened_tuple = tuple(altered_string.split(","))
>> ('1', '2', '3', '5', '6', '7', '8', '9')

全部在一行中,然后:

flattened_tuple = tuple(str(a_tuple).replace("(", "").replace(")", "").replace(" ", "").split(","))
>> ('1', '2', '3', '5', '6', '7', '8', '9')

要找到最大的数字,然后使用:

max(flattened_tuple)
>> 9

请注意,这样做会将元组内的任何元素转换为字符串。如果您希望它们输出相同,则必须进行进一步的格式化。但是,仅出于此目的,它就可以正常工作。

于 2013-04-29T00:30:20.370 回答