タプルのタプル内のすべての要素の最大値を取得するにはどうすればよいですか?
例:
x = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0, 1, 10))
# want 10
タプルのタプル内のすべての要素の最大値を取得するにはどうすればよいですか?
例:
x = ((3, 4, 5), (4.5, 5.5, 6.5), (-1, 0, 1, 10))
# want 10
あなたが「なぜインポートするのか、いつ自分でできるのか」が好きな人なら、次のことをお勧めします。
>>> 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)
ネストされた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
タプルをすべての要素を含む単一のタプルに変換し、それを反復処理することができます (または組み込みメソッド 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')
すべてを 1 行にすると、次のようになります。
flattened_tuple = tuple(str(a_tuple).replace("(", "").replace(")", "").replace(" ", "").split(","))
>> ('1', '2', '3', '5', '6', '7', '8', '9')
最大数を見つけるには、次を使用します。
max(flattened_tuple)
>> 9
このようにすると、タプル内のすべての要素が文字列に変換されることに注意してください。それらを同じものにしたい場合は、さらにフォーマットを行う必要があります。ただし、この目的だけでも、これはうまく機能します。