[解決済み] なぜPythonはリストの末尾からインデックスを作成するとき、(0ではなく)インデックス-1から始めるのでしょうか? 重複] [重複
2023-03-22 07:05:30
質問
list = ["a", "b", "c", "d"]
print(list[3]) # Number 3 is "d"
print(list[-4]) # Number -4 is "a"
どのように解決するのですか?
別の言葉で説明すると、なぜなら
-0
は
0
から始まる場合、後方は
0
から始まる場合、インタプリタにとって曖昧なものとなります。
について混乱しているのであれば
-
に混乱していて、より分かりやすく後方にインデックスを付ける別の方法を探しているのであれば、次のようにしてみてください。
~
を試してみてください。これは前方の鏡です。
arr = ["a", "b", "c", "d"]
print(arr[~0]) # d
print(arr[~1]) # c
の典型的な使用法は
~
は、ミラーノードを交換したり、ソートリストの中央値を見つけるようなものです。
"""swap mirror node"""
def reverse(arr: List[int]) -> None:
for i in range(len(arr) // 2):
arr[i], arr[~i] = arr[~i], arr[i]
"""find median in a sort list"""
def median(arr: List[float]) -> float:
mid = len(arr) // 2
return (arr[mid] + arr[~mid]) / 2
"""deal with mirror pairs"""
# verify the number is strobogrammatic, strobogrammatic number looks the same when rotated 180 degrees
def is_strobogrammatic(num: str) -> bool:
return all(num[i] + num[~i] in '696 00 11 88' for i in range(len(num) // 2 + 1))
~
というのは、逆符号や補集合の数学的なトリックであり、この方が理解しやすい場合もあるのです。
のようなpythonのトリックを使用すべきかどうかについての議論です。
~
:
私見ですが、自分自身でメンテナンスするコードであれば、読みやすさや使いやすさから、バグを回避したり、目的を達成するためにどんなトリックを使ってもよいと思います。しかし、チーム作業では あまりに巧妙な」コードの使用は避ける というのは、同僚に迷惑がかかるからです。
例えば、次のような簡潔なコードです。 Stefan Pochmann を解決するための この問題 . 私は彼のコードから多くのことを学びました。しかし、いくつかはただ楽しむためのもので、使うにはあまりにハッキング的です。
# a strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down)
# find all strobogrammatic numbers that are of length = n
def findStrobogrammatic(self, n):
nums = n % 2 * list('018') or ['']
while n > 1:
n -= 2
# n < 2 is so genius here
nums = [a + num + b for a, b in '00 11 88 69 96'.split()[n < 2:] for num in nums]
return nums
私がまとめたのは Pythonトリック をこんな感じでまとめてみました。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スライス表記を理解する
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] バブルソートの宿題
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例