1

タプルのタプル内のすべての要素の最大値を取得するにはどうすればよいですか?

例:

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

5 に答える 5

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 に答える
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')

すべてを 1 行にすると、次のようになります。

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 に答える