在Python3中如何将列表转换为循环列表?

2024-09-29 23:17:21 发布

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

我有一个列表[0,1,0],希望遍历它,并查看每个项的邻居(邻居=2个索引之外),如果邻居有相同的值,则更新值(1变为0,反之亦然)。当遍历并到达列表中的最后一项时,我想从列表的第0个索引处重新开始。因此,第一个索引中的项的邻居实际上是上例中第0个索引中的项,其列表长度为3。你知道吗

我还希望能够确定遍历列表的次数。你知道吗

如果列表中某个项的邻居(两个索引之外)具有相同的值,我可以更新该项的值,但是当我到达列表中的最后一个项时,我遇到了索引超出范围错误的问题。为了解决这个问题,我尝试从列表中弹出最后一项并将其附加到开头,这样我就不会从数组的末尾掉下来,但是我没有得到预期的结果(请参见下面的结果),我不确定为什么。你知道吗

我还尝试过使用cyclefrom itertools,这对于遍历非常有用,但对于访问特定列表中的元素却没有好处,因为它可以在某个索引处获取列表的值。你知道吗

弹出和追加的结果如下:

[0, 1, 0]
[1, 0, 1]
[0, 1, 0]
[1, 0, 1]
[0, 1, 0]
[1, 0, 1]

我希望结果如下:

original list = [0,1,0]
after 1 time step | [1,1,0]
after 2 time steps | [1,0,0]
after 3 time steps | [1,0,1]

等等。你知道吗


Tags: 元素列表time错误数组steps次数itertools
2条回答

对于您的特定任务,我会保持初始列表的顺序不变,并检查索引:

l = [0, 1, 0]

n = 0
while n < 1:  # choose number of iterations
    for i in range(len(l)):
        l[i] = (l[i], int(not l[i]))[l[i] == l[(i+2)%len(l)]]  # invert when equal to its neighbor 
        print(l)
    n += 1

# [1, 1, 0]
# [1, 0, 0]
# [1, 0, 1]

然而,为了使列表循环,我宁愿将第一个索引附加到最后一个索引:

l = [1, 2, 3]
for _ in range(7):
    print(l)
    f = l.pop(0)
    l.append(f)

#[1, 2, 3]
#[2, 3, 1]
#[3, 1, 2]
#[1, 2, 3]
#[2, 3, 1]
#[3, 1, 2]
#[1, 2, 3]

您也可以通过弹出和追加来获得相同的结果,但您必须在每个步骤中根据原始列表对索引进行排序:

for i, _ in enumerate(range(3)):
    l[0] = int(not(l[0])) if l[0] == l[2] else l[0]
    ind = (len(l) - i)%len(l)  # get actual position of first element
    original = l[ind:] + l[:ind]  # here we start from index 0
    print(l[ind:] + l[:ind])
    f = l.pop(0)
    l.append(f)

输出:

[1, 1, 0]
[1, 0, 0]
[1, 0, 1]

您的问题不清楚,但我从您的问题中解释的是,您可能希望以循环方式遍历列表并更新其值。 试试这个

   list = [0,1,0]
   key=2;
   for i in range(len(list)):
      index = (i+key)%len(list);
      if list[i] == list[index]:
          list[i] = int(not list[i]);
      print(list);


相关问题 更多 >

    热门问题