1

これが私のコードです。 def Advance(stringlist) 以外はすべて正常に動作します

def printList(stringlist):
    print stringlist or []
def add (stringlist, string):
    item = [] if string is None else [string]
    return item + (stringlist or [])
def current (stringlist):
    item =''
    return item + stringlist[0]
def advance(stringlist):
    item = []
    item2 = item + stringlist[1:]
    for item in range(5):
        return item2

そして、私はこの結果を探しています

>>> myList = None
>>> printList(myList)
[]
>>> for word in ['laundry','homework','cooking','cleaning']:
...     myList = add(myList, word)
...     printList(myList)
... 
[laundry]
[homework, laundry]
[cooking, homework, laundry]
[cleaning, cooking, homework, laundry]
>>> current(myList)
'cleaning'
>>> for i in range(5):
...     myList = advance(myList)
...     printList(myList)
...     print current(myList)
... 
[cooking, homework, laundry, cleaning]
cooking
[homework, laundry, cleaning, cooking]
homework
[laundry, cleaning, cooking, homework]
laundry
[cleaning, cooking, homework, laundry]
cleaning
[cooking

しかし、私は得ています

['cooking', 'homework', 'laundry']
cooking
['homework', 'laundry']
homework
['laundry']
laundry
[]

他のコードは正常に動作しますが、「advance」コードでのみ、リストを 4 つの単語にし、そこから文字列を削除しないようにするにはどうすればよいですか?

4

1 に答える 1

1

リストのローテーションを探しています。これは、いくつかのリスト スライスを使用すると最も簡単に実現できます。

def advance(stringlist):
    return stringlist[1:] + stringlist[:1]

これはリストの最初の要素を取り、それを新しいリストの最後に置きます:

>>> def advance(stringlist):
...     return stringlist[1:] + stringlist[:1]
... 
>>> advance(['cooking', 'homework', 'laundry', 'cleaning'])
['homework', 'laundry', 'cleaning', 'cooking']

あなたのバージョンは単に返されました stringlist[1:](つまり、最初の要素以外のすべて); ステートメントはreturnそこで関数を終了し、ループに配置されたときに複数回戻ることはありません。

于 2013-10-28T20:35:46.247 に答える