回答
你可以使用一个嵌套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
使用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
这些方法是相比于其它替代方案是高效的。
还有一个选项,沿着嵌套的for循环的线路:
max(max(i) for i in x)
如果你是一个为什么,进口时-I-可以-DO-IT-我还挺家伙,我建议:
>>> 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)
Python文档建议我们应该更喜欢'itertools'来展平,而不是使用'sum'。 http://docs.python.org/2/library/functions.html#sum – 2013-04-29 00:23:00
@AshwiniChaudhary建议是因为'itertools.chain'返回一个生成器而不是创建一个新的列表/元组。如果你打算做一个'list',两种选择都差不多。 – juliomalegria 2013-04-29 00:32:14
不,它们不一样,'itertools.chain'和'chain.from_iterable'与生成器表达式和'sum'相比非常高效。 – 2013-04-29 00:44:16
您可以在元组转换为与所有元素的一个元组,然后遍历那个(或使用内置的方法Max())。这也回答了你如何“扁平化”元组的问题。
a_tuple = ((1, 2, 3), (5, 6, 7), (8, 9))
tuple_to_string = str(a_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
注意到,做这种方式将任何元素转换的内该元组为一个字符串。如果你想让它们出来,你必须进一步格式化。尽管如此,这个工作很好。
- 1. 如何从元组中获取元组中元素的引用元组?
- 2. 如何获取具有XPATH中最大子元素的元素?
- 3. 获取元素(元组)由2组
- 4. 获取列表中的元组元素
- 5. 如何获取两个元组的最后一个元素以外的元素?
- 6. 如何在Swift中获取元组数组的最大Double值?
- 7. 获取最大元素
- 8. 如何从表单元素的值中的数组中获取数组元素?
- 9. 如何从数组中获取元素。
- 10. Boost.Range的C++元组 - 获取元素类型的元组?
- 11. 获取元组字典中元组最大组成部分的关键
- 12. 获取一个元组的第一个元素,在元组
- 13. 如何从SML中的元组列表中获取元素?
- 14. 如何获取数组元素的PropertyDescriptor?
- 15. 如何获得最大和元组
- 16. 返回数组中最大的元素
- 17. 两个数组中最大的元素
- 18. 如何获得一个元组元素
- 19. 使用递归获取数组中最大的元素
- 20. 从多维数组中的元素获取最大值?
- 21. 使用jQuery获取数组中元素的最大值属性
- 22. 如何从Python中的元组获取第二个元素?
- 23. C++ 11。如何从没有const的元组中获取元素
- 24. 如何在C#中获取元组的元素?
- 25. 如何在javascript中获取数组中的最小元素?
- 26. PHP:获取数组元素
- 27. xsl获取元素数组
- 28. 从元组元组中获取值
- 29. HIVE,如何从数组中获取元素,元素本身也是数组
- 30. jQuery:如何获取一组元素?
作为相关信息,我该如何平坦化一个列表,使得'flatten(x)=(3,4,5,4.5,5.5,6.5,-1,0,1,10)'? – Frank 2013-04-29 00:07:39