在python中逐个浏览列表项

时间:2017-09-22 18:03:44

标签: python python-3.x

嘿,我对python很新,我想这可能是一个非常基本的问题。我搜索了一个论坛,但我找不到匹配的问题。

我有一个字符串列表:

target = ('off', 'off', 'off', 'on', 'off', 'on', 'off', 'off', 'off', 'on', 'on', 'off', 'off', 'on', 'off', 'off', 'on', 'off', 'off', 'on')

现在我想每次运行代码时逐个浏览列表中的项目:

for current_target in target:
print(current_target)

然而,for循环一次遍历所有项目。我想要的是每次运行代码时都应该移动到列表中的下一个项目。

有人可以帮我解决这个问题吗?

由于 Vatsal

编辑:评论中对问题的OP解释是:

"例如,我写了一个代码,可以打印列表中的单个项目。当我再次运行该代码时,它将打印下一个项目。所以首先它应该打印索引为0的项目,然后当我重新运行代码时,它应该打印索引为1的项目,依此类推,直到列表的末尾。"

请在回答之前阅读。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用pop()逐个删除数组副本中的项目(保留原始数组以备日后需要)。这仅在记忆中有效。

copy_target = array(target)
a = copy_target.pop(0) # Returns 'off'
b = copy_target.pop(0) # Returns the next 'off'

答案 1 :(得分:1)

持久数据的非常基本的例子。

使用文本编辑器创建一个名为eg的文件' list.json'使用所需的字符串列表:

["off", "off", "off", "on", "off", "on", "off", "off", "off", "on", "on", "off", "off", "on", "off", "off", "on", "off", "off", "on"]

然后每次运行此程序时,它都会从文件中读取整个列表,打印第一个元素并将其余元素保存回文件。在重复调用之后,将使用该列表并准备一个新列表。

import json
FILE='list.json'    # should be full path 

with open(FILE) as f:
    lst = json.load(f)
if lst:
    print(lst[0])
    with open(FILE,"w") as f:
        json.dump(lst[1:], f)

答案 2 :(得分:0)

您在寻找generator吗?

例如:

target = ('off', 'off', 'off', 'on', 'off', 'on', 'off', 'off', 'off', 'on', 'on', 'off', 'off', 'on', 'off', 'off', 'on', 'off', 'off', 'on')

def nextitem(items):
    yield from items

loopover = nextitem(target)

while True:
    try:
        print(next(loopover))
    except StopIteration:
        print('reached end of list')
        break

打印......

off
off
off
on
off
on
off
off
off
on
on
off
off
on
off
off
on
off
off
on
reached end of list

生成器正在冻结状态,每次使用next调用都会为您提供下一个值。您可以将生成器保存在数据结构中,运行其他一些代码并调用生成器并使用 next 值。

使用列表,您可以直接使用loopover = iter(target)直接执行此操作。

答案 3 :(得分:0)

创建一个文本文件来存储执行参考。从0开始,作为每次执行的内容和增量。一旦列表耗尽,将内容重置为0

target = ('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'tweleve')

with open("1.txt","r") as f:
    num = int(f.read())
    print target[num]

with open("1.txt","w") as f:
    if num >= len(target)-1:
        f.write("0")
    else:
        f.write(str(num+1))

文件:

-bash-4.1$ cat 1.txt
0