Pythonのenumerate()
関数は、イテラブル(リスト、タプル、文字列など)の要素とそのインデックスを同時に取得するための組み込み関数です。しかし、この関数を使用する際にはいくつかの注意点があります。
enumerate()とスライスリスト
例えば、リストをスライスしてからenumerate()
を使用すると、期待した結果が得られないことがあります。これは、スライス操作が新しいリストを作成するため、元のリストとは異なるオブジェクトに対して操作を行っているからです。
以下に、この問題を示すコードを示します。
def swap(nums, i, j):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
mylist = [0,1,22,33,4]
for pos, num in enumerate(mylist[:-1]):
print(pos,num)
if pos == 0:
swap(mylist,2,3)
このコードでは、enumerate()
がスライスされたリストに対して実行されています。その結果、swap()
関数が呼び出されたときに、元のリストではなくスライスされた新しいリストが変更されます。
この問題を解決するには、新しいリストを作成してからそのリストに対してenumerate()
を使用することです。
new_list = mylist[:-1]
for pos, num in enumerate(new_list):
print(pos,num)
if pos == 0:
swap(new_list,2,3)
このように、Pythonのenumerate()
関数は非常に便利なツールですが、その動作を正しく理解していないと予期しない結果を招くことがあります。特に、リストのスライスや他のイテラブルなオブジェクトを使用する際には注意が必要です。