手动枚举lis

2024-06-23 20:03:06 发布

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

我正试图弄清楚如何手动枚举一个列表,但是由于我不知道如何拆分data列表,我陷入了困境。这是我目前掌握的密码。。在

enumerated_list = []
data = [5, 10, 15]

for x in (data):
    print(x)

for i in range(len(data)):
    enumerate_rule = (i, x)
    enumerated_list.append(enumerate_rule)

print(enumerated_list)

打印出来。。在

^{pr2}$

当我想要的是[(0, 5), (1, 15), (2, 15)]。我该怎么做?在


Tags: in密码列表fordatalenrange手动
3条回答

由于x遍历`data中的每个元素,因此在以下末尾:

for x in (data):
    print(x)

x将是最后一个元素。这就是为什么要将15作为每个元组中的第二个元素:

^{pr2}$

您只需要一个循环:

for i in range(len(data)):
    enumerate_rule = (i, data[i]) # data[i] gets the ith element of data
    enumerated_list.append(enumerate_rule)

使用the ^{} built-in

>>> list(enumerate([5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]

原始代码的错误在于您在循环中使用了x,但是,x在该循环中没有改变,它只是从您打印值的前一个循环中留在那里。在

然而,这种方法是不好的。修复它需要按索引循环,而Python并不是这样设计的-它很慢而且很难阅读。相反,我们按值循环。内置的enumerate()可以为我们完成这项工作,因为这是一项相当常见的任务。在

如果您真的不想使用enumerate()(这根本没有意义,但可能作为一种任意的限制,试图教您一些其他的东西),那么还有更好的方法:

^{pr2}$

这里我们使用^{},这是一个python函数,用于同时循环两组数据。这将从每个iterable返回第一个值的元组,然后从每个iterable返回第二个值,等等。。。当与^{}结合时,这就给了我们想要的结果,它在tin上做了它所说的。在

如果你真的觉得需要手动构建一个列表,那么更像Python的方式来做一些不太和谐的事情:

enumerated_list = []
count = 0
for item in data:
    enumerated_list.append((count, item))
    count += 1

不过,请注意,一般情况下,人们会使用list comprehension来构建这样的列表—在这种情况下,一旦这样做了,使用前面的方法之一会更有意义。这种单子的制作效率低下,而且很难阅读。在

enumerate_rule = (i, x)是问题所在。每次都使用相同的值(x,列表中的最后一项)。将其更改为enumerate_rule = (i, data[i])。在

相关问题 更多 >

    热门问题