如何获得元组元组中所有元素的最大值?
示例:
x = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0, 1, 10))
# want 10
答案 0 :(得分:5)
使用itertools.chain
和max()
:
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
方法非常有效。
答案 1 :(得分: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)
答案 2 :(得分:3)
另外一个选项,沿着嵌套的for循环:
max(max(i) for i in x)
答案 3 :(得分: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
答案 4 :(得分: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
请注意,这样做会将元组内的任何元素转换为字符串。如果你想要它们出来,你将不得不做进一步的格式化。不过,仅此目的,这很好用。