【问题标题】:list on range with kind of repeat the list列表范围内重复列表
【发布时间】:2013-11-07 19:13:12
【问题描述】:

这是我的代码,一切正常,除了 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
[]

其他代码工作正常,仅在“高级”代码上 我怎样才能使列表变成四个单词而不从中删除任何字符串?

【问题讨论】:

  • 为什么要为current() 函数返回'' + stringlist[0]只要stringlist[0]就够了。

标签: python list python-2.7


【解决方案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']

您的版本只是返回 just stringlist[1:](所以除了第一个元素之外的所有内容); return 语句在那里结束函数,然后,它在循环中不会返回多次。

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2012-03-21
    • 2021-07-13
    相关资源
    最近更新 更多