0

次のように任務を与えられました。

listA、listB、お​​よびインデックスの 3 つのパラメーターを受け取り、listB の要素がインデックスに挿入された listA のコピーを返す、insert という関数を作成します。コードは、文字列とリストの両方で機能する必要があります。

例は次のようになります。

insert([1,2,3], ['a', 'b', 'c'], 3)与えるべき[1, 2, 'a', 'b', 'c', 3]

と:

insert('dog', 'cat', 1)与えるべき'dcatog'

この最初の部分は、ループありとループなしの両方で完成させたいと思っています。これまでのところ、私は得ました:

def insert (listA, listB, index):
    return listA[0:index] + listB + listA[index:len(listA)]

これは正しく機能し、上記の正しい例が得られます。ただし、ループでこれを行う方法がわかりません。次のように for ループを使用しようとしています。

def insert (listA, listB, index):

    for nextchar in listA:
            if nextchar == index:
                listA.insert(index, listB)
        return listA

しかし、それは正しくありません。それは私が得た最も近いものです。

[1, 2, ['a', 'b', 'c'], 3]

'dog'

上記の例の場合。

しかし、それはネストされたリストですよね?私はそれをしたくありません。2 番目の例は完全に間違っています。

4

2 に答える 2

1

For the "dog" example, remember that strings in Python are immutable... that is, they can't be changed. So if you are trying to insert some characters into a string "dog", it won't be changed.

Strings don't have the "insert" method at all, so you will get an error in the "dog" example.

You will need to create a new string, and NOT use the insert method, if it's a string being passed in.

于 2013-10-18T23:00:49.967 に答える
0

あなたの例は少しずれていると思います。

insert([1,2,3], ['a', 'b', 'c'], 3)

実際に戻る必要があります

[1, 2, 3, 'a', 'b', 'c']

とにかく、これが私の修正です:

def insert (listA, listB, index):
    if index == len(listA):
        listA.extend(listB)
        return listA

    for i in range(len(listA)):
        print i
        if i == index:
            for j, b_elem in enumerate(listB):
                listA.insert(i+j, b_elem)
    return listA

指定されたコードのバグは、そのインデックスから開始する listB の各要素を挿入するのではなく、listA のそのインデックスにリストを挿入していることです。

于 2013-10-18T23:06:31.803 に答える