通过2个变量遍历Python列表

时间:2019-08-10 19:21:02

标签: python

在JavaScript中,我可以使用两(2)个指针从列表的开头和结尾获取值,然后递增/递减指针以继续。例如:

for (let i = 0, j = list.length - 1; i < j; i++, j--) {
    console.log(i, j);
}

我将如何在Python中完成相同的任务?我知道我可以通过以下操作获取当前索引:

for index in enumerate(list):
    print(index)

但是我怎么也可以初始化另一个指针,从头开始呢?

5 个答案:

答案 0 :(得分:6)

我假设您想要一个可以对索引进行任何处理的解决方案,而不仅仅是打印出来。 Python的for循环还有其他优势。因此,请使用while循环。

i = 0
j = len(alist)
while i < j:
    print(i, j)  # or console.log(i, j) or whatever you want here
    i += 1
    j -= 1

这与使用zip类似,这更像Python。在这里,我说明了除了打印索引以外的其他操作。

alist = [3, 1, 4, 1, 5, 9]
llen = len(alist)
for i, j in zip(range(llen // 2), range(llen - 1, -1, -1)):
    print(alist[i], alist[j])

但是忽略索引,而仅使用列表中的项,则更具Python感,如

alist = [3, 1, 4, 1, 5, 9]
llen = len(alist)
for u, v in zip(alist[:llen // 2], alist[::-1]):
    print(u, v)

答案 1 :(得分:3)

这是一个示例。将第二个索引作为长度减去索引减去一的函数:

l = [1, 2, 3, 4]
for i, _ in enumerate(l):
    print(l[i], l[len(l)-i-1])

这将输出

(1, 4)
(2, 3)
(3, 2)
(4, 1)

不自行打印索引,但可以选择打印索引。

答案 2 :(得分:1)

最蟒蛇的方式是使用列表理解。

 In [9]: print([f'{i} {j}' for i, j in zip(named_list, reversed(named_list)) if i < j])
Out [9]: ['0 9', '1 8', '2 7', '3 6', '4 5', '5 4', '6 3', '7 2', '8 1', '9 0']

此列表理解是

的快捷方式
results = []
for i, j in zip (named_list, reversed(named_list)):
   if i >= j:
      break
   results.append((i,j))

答案 3 :(得分:1)

我确定您会喜欢这个:

for i in zip(alist, alist[::-1]):
    print(i) 
    # use i[0] and i[1] if you need both in different vars

您可以分别使用i [0]和i [1]访问变量。

输出:

(1, 4)
(2, 3)
(3, 2)
(4, 1)

答案 4 :(得分:0)

如果您要两个索引列表,一个从低到高开始,另一个是反向的,range()函数可以提供很多帮助。

例如,如果您有一个列表x = [1,2,3,4,5,6,7,8,9,10],则可以找到两个索引为:

low_to_high_idx = list(range(0, len(x)-1))
high_to_low_idx = list(range(len(x)-1, -1, -1))

您可以同时使用zip()函数获取两个索引