5

こんにちは私の質問は、ここの何人かのユーザーによるずっと前の投稿に関連しています:

Pythonリストで文字列値を見つけて置換する

私の特定の状況のた​​めに。私はこのようなリストを持っています:

appl =  ['1', 'a', 'a', '2', 'a']

「a」の「単一の不明な」インスタンスのみを空のスペース(「a」があった場所の位置を保持する)に置き換えたいと思います。たった1人のキャラクターでどうやってやるのかわからない。誰か助けてもらえますか?前もって感謝します。

編集:私はそれが変化する変数であるため、最初に「a」を見つけるために「インデックス」関数を使用する必要があることに言及する必要があります。そして、文字を置き換えるコードが必要です。

EDIT2:多くの人がインデックスを2と想定していますが、キャラクターのインデックスがわからないことを指摘したいと思います。また、「a」はリストに約20回表示されます(固定数のままです)が、それらの場所は変更されます。ユーザー入力に基づいて「a」を置き換えたい。これは私が取り組んでいる実際のリストです:

track  [2] =   ["|","@","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"]

@は文字です| は境界線で、「」は空のスペースです。ユーザーが入力を入力して@を右に移動する量を選択すると、@の新しい場所を示す新しい画像が表示され、@の古い場所がスペースに置き換えられます。リストの長さは一定のままです。これが私の質問の文脈です。

4

5 に答える 5

3

リストをトラバースし、要素が'a'2つ見つかるまでインデックスを保存することで、2番目に出現するインデックスを簡単に見つけることができます。

>>> appl = ['1', 'a', 'a', '2', 'a']
>>> idxs = (i for i,c in enumerate(appl) if c == 'a')
>>> next(idxs)
0
>>> appl[next(idxs)] = ''
>>> appl
['1', 'a', '', '2', 'a']
于 2012-11-22T23:14:31.593 に答える
2

ループとともに、インデックスを使用してこの目標を達成できます。これがそのための小さな関数です:

def replace_element(li, ch, num, repl):
    last_found = 0
    for _ in range(num):
        last_found = li.index(ch, last_found+1)
    li[li.index(ch, last_found)] = repl

使用する:

replace_element(appl, 'a', 2, ' ')

このメソッドは、文字がリストにない場合に次のエラーをスローするため、特に便利です。

ValueError: 'a' is not in list
于 2012-11-22T23:12:32.660 に答える
1
appl = ['1', 'a', 'a', '2', 'a']
a_indices = [i for i, x in enumerate(appl) if x == 'a']

if len(a_indices) > 1:
    appl[a_indices[1]] = ' '
于 2012-11-22T23:12:40.810 に答える
1

まず、値の最初の出現を見つけます。

>>> appl = ['1', 'a', 'a', '2', 'a']
>>> first = appl.index('a')
>>> first
1

2番目を見つけるには、最初の場所に1を加えたものから始めます。

>>> second = appl.index('a', first+1)
>>> second
2

次に、その場所を必要なスペースに設定します。

>>> appl[second] = ' '
>>> appl
['1', 'a', ' ', '2', 'a']
于 2012-11-22T23:19:44.043 に答える
0

あなたのリスト(、、"|""@"は短く、"@"常に別の場所に存在しているようです。この場合、リスト内の最初のオカレンスを1行で置き換えることができ"@"ますappl

appl[appl.index("@")] = " "

リストが大きく、アイテムが存在しない可能性がある場合:

i = next((i for i, x in enumerate(lst) if x == item), None)
if i is not None:
   lst[i] = replacement
于 2012-11-23T00:47:43.807 に答える