質問: `a = ['a1', 'a10', 'a100', 'a110', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']` リストの中身の内、凡てが文字列で書かれた文字列+数値型のリストです。 ソート等によると、一番左から番号の小さい順にソートされるようです。 一番左の数字が一致していると、その右の数字の大小で小さいほうが前に来ます。 この中から、**最も数字的に大きい要素**を、手っ取り早く取得する一番いい方法はどのような方法でしょうか? `sort()`は、その引数に、ソートを制御するキーを入れられるようですが、どのように書けばいいのかわかりません。 ここには載せていない途中式により、このaの文字部分は、絶対すべてが一致するように取得されています。 この中では、'a110'を、取得するようにしたいです。 シーケンス処理をして一個ずつ調べるしかないでしょうか。 追記: 既に回答をいただいていますが、追加です。 数値は全て整数値です。 -100ハイフン付きの数値や実数値0.01などは想定していません。 文字種は何でも結構ですが、感覚的な域を出ませんが、 人が読んで判読可能な文字が中心です。 なぜなら、この文字は、ユーザーが決定するものだからです。 ですから、読めない文字を入れてもユーザーの責任になります。 数値などは、ユーザーが重複した名前を入れてしまった時に、 自動で追加分であることを表わすための数値を追加するプログラムを書きたかったのです。 そのために、最大値の文字列を取得したかったというのが背景にあります。 自分の頭がそこまで及びませんで申し訳ありませんでした。 Nijiさんがおっしゃっているように001等でソート可能とのことですが、 (おっしゃられて初めて気が附きましたが)、ユーザーが001と書いてくれるとは限らないなと考えました。
回答: リスト内包表記を使うと ``` max([int(i.lstrip('a')) for i in a]) ``` Pandas を使うと ``` import pandas as pd pd.Series(a).str.lstrip('a').astype(int).max() ``` また、`idxmax`を使うと最大値のあるインデックスが計算されるので ``` import pandas as pd i = pd.Series(a).str.lstrip('a').astype(int).idxmax() a[i] ``` そもそもからいうと'a1'とせずに最大の桁数を併せて'a001'のようにすると`sort`で数字の値の順に並びます。