当列表达到最大索引时,如何从头开始迭代列表

2024-10-01 00:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我是python新手,我有一个问题。我知道有一种方法可以通过%来实现,但我尝试在没有模的情况下实现它,如果有方法的话。我有一个数字列表,我需要每N个数字(我有每秒钟的数字来保持简单)打印出来,但当is达到最大索引时,它会给我一个错误“列表超出索引”。我试过了,但似乎不起作用。这就是我到目前为止的想法:

def napln(n):
s = []
for i in range(n):
    s.append(i)
    print(s)
return s

def rozpocitavadlo(s):
rozpocitavadlo = []
for i in s:
    original_position = s[i]
    changed_position = s[i+2]
    original_position = changed_position
    if original_position >= len(s):
        for j in s[0:]:
            original_position = s[j]
            changed_position = s[j+2]
            original_position = changed_position
    rozpocitavadlo.append(s.pop(original_position))

s = napln(6)

Tags: 方法in列表forisdef情况position
3条回答

如果您只是想每两个打印一个数字,您可以简单地运行以下操作:

def rozpocitavadlo(s):
    to_print = s[::2]
    print(to_print)

[1::2]中添加1迭代过程将从跳过第一个元素的第二个元素开始,如下所示:

def rozpocitavadlo(s):
    to_print = s[1::2]
    print(to_print)

如果还希望重新开始并将跳过的元素添加到最终列表中,则可以先添加偶数,然后添加奇数:

def rozpocitavadlo(s):
    to_print = s[1::2]
    to_print.extend(s[0::2])
    print(to_print)

您的结果将是:[1, 3, 5, 0, 2, 4]

您可以深化here切片表示法,该表示法允许您迭代自定义数量的元素列表

显然,正如@vishal gahlot所说,您可以通过向函数添加Nth参数来参数化要跳过的元素数

def rozpocitavadlo(s, Nth: int):
    to_print = s[::Nth]
    print(to_print)

FINAL:对于以Nth作为参数的更灵活的实现,您可以在原始列表上反复迭代,直到每个元素都添加到新列表中:

def rozpocitavadlo(s, nth: int):
    to_print = []
    for i in reversed(range(nth)):
        to_print.extend(s[i::nth])
    print(to_print)

评论后更新:这样您将得到偶数,删除它们,然后在剩余元素上重复,直到最后一个剩余:

def rozpocitavadlo(s):
    to_print = []
    while len(s) > 0:
        if len(s) == 1:
            to_print.extend(s[:])
            break
        to_print.extend(s[1::2])
        del s[1::2]
    print(to_print)

您的输出将是:[1, 3, 5, 2, 4, 0]

您的问题i have a list of numbers and i need to every Nth(i have every second number to keep it simple) number to be printed out可以通过内置Python函数解决!不需要额外的代码

for i in range(0, len(s), 2):
    print(s[i])

range的参数是起始索引(0)、要循环的项目数(len(s))以及步骤的大小。这样,Python将打印第0个元素,然后再打印第2个元素

编辑: 您可以尝试以下方法:

s = [0, 1, 2, 3, 4, 5]
out = []

for offset in range(len(s) // (len(s) // 2)):
    for i in range(offset, len(s), 2):
        out.append(s[i])
        offset = offset + 1

print(out)

这样,您将使用不同的起始偏移量在列表中循环多次,因此您首先得到所有偶数,然后是所有奇数。偏移循环中的计算用于计算我们需要在列表中循环多少次

def rozpocitavadlo(s,Nth): return s[::Nth]

您可以使用此方法打印列表的每N个数字

相关问题 更多 >