私はこれをオンラインで取っていますPythonコース そして彼らは学生が1行のソリューションを使用するのを嫌います。コースはこのソリューションの括弧を受け入れません。
私はすでにリスト内包を使用して問題を解決しましたが、コースは私の答えを拒否しました。
問題は次のとおりです。
index
およびその他のリストメソッドを使用して、X
内のlist
のすべての出現箇所をY
に置き換える関数replace(list, X, Y)
を記述します。たとえば、_L = [3, 1, 4, 1, 5, 9]
_の場合、replace(L, 1, 7)
はL
の内容を_[3, 7, 4, 7, 5, 9]
_に変更します。この演習を困難にするために、_[]
_を使用することは許可されていません。注:returnを使用する必要はありません。
これは私がこれまでに持っているものですが、TypeErrorのために壊れます: 'int'オブジェクトは反復可能ではありません。
_list = [3, 1, 4, 1, 5, 9]
def replace(list, X, Y):
while X in list:
for i,v in range(len(list)):
if v==1:
list.remove(1)
list.insert(i, 7)
replace(list, 1, 7)
_
これは私の最初の答えでしたが、拒否されました。
_list = [3, 1, 4, 1, 5, 9]
def replace(list, X, Y):
print([Y if v == X else v for v in list])
replace(list, 1, 7)
_
私のより長い解決策を修正する方法についてのアイデアはありますか?
range()
は整数のフラットリストを返すため、2つの引数に解凍することはできません。 enumerate
を使用して、インデックスと値のタプルを取得します。
def replace(l, X, Y):
for i,v in enumerate(l):
if v == X:
l.pop(i)
l.insert(i, Y)
l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)
enumerate
の使用が許可されていない場合は、単純な古いカウンターを使用してください。
def replace(l, X, Y):
i = 0
for v in l:
if v == X:
l.pop(i)
l.insert(i, Y)
i += 1
l = [3, 1, 4, 1, 5, 9]
replace(list, 1, 7)
最後に、質問の作成者がおそらく探していたものを使用できます(これは、反復ごとにリストを線形検索するため、最も非効率的なアプローチですが)。
def replace(l, X, Y):
for v in l:
i = l.index(v)
if v == X:
l.pop(i)
l.insert(i, Y)
l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)
これを試すこともできます(必要に応じて、_[]
_ sまたはenumerate()
を使用しないでください)。
_for i in range(len(l)): # loop over indices
if l.__index__(i) == X: # i.e. l[i] == X
l.__setitem__(i, Y) # i.e. l[i] = Y
_
これはおそらく課題があなたに望んでいることではありませんが、学習目的のためにここに残しておきます。
注:list
は組み込み関数ですでに使用されているため、変数名として使用しないでください。ここでは代わりにl
を使用しました。
enumerate
が許可されていない場合は、while
ループを使用することもできます。
>>> def replace(L_in, old_v, new_v):
while old_v in L_in:
idx=L_in.index(old_v)
L_in.pop(idx)
L_in.insert(idx, new_v)
>>> L = [3, 1, 4, 1, 5, 9]
>>> replace(L, 1, 7)
>>> L
[3, 7, 4, 7, 5, 9]
名前としてlist
を使用しないでください。多くの苦痛を引き起こします。
def replace(my_list, X, Y):
while X in my_list:
my_list.insert(my_list.index(X), Y)
my_list.pop(my_list.index(X))
asad Saeeduddinに完全に同意しますが、iの最初の値は-1でなければなりません。これは、必要なリストの最初のオブジェクトを置き換えるのに役立ちます。
def replace(l, X, Y):
i = -1
for v in l:
i += 1
if v == X:
l.pop(i) # remove item at given position (position number i)
l.insert(i, Y) # insert item Y at position i
l = [1, 1, 4, 1, 5, 9]
replace(l, 1, 7)
print(l)
これは私のために働いた。かなり簡単です。おそらくより少ない行でそれを行う方法ですが、これまでのWebサイトで教えられたことに基づいて、これは機能します。
def replace(L, X, Y):
while X in L:
i = L.index(X)
L.insert(i, Y)
L.remove(X)