Python列表迭代不使用条件?

xdnvmnnf  于 2023-09-29  发布在  Python
关注(0)|答案(4)|浏览(93)

我是Python世界的初学者,到目前为止我真的很喜欢这门语言!
在我的练习中,我发现了以下一个:“使用循环来显示给定列表中出现在奇数索引位置的元素”,我有两种解决方案。
但是,我不明白为什么下面的两段代码没有提示相同的结果。
第一个:

#THIS ONE IS WORKING
my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

for index in range(len(my_list)):
    #print(type(index), end=" ")
    if index % 2 != 0:
        print(my_list[index], end=" ")

第二个:

#THIS ONE IS **NOT** WORKING
my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

for item in my_list:
    #print(type(item), end=" ")
    if item % 2 != 0:
        print(item, end=" ")

正如你所看到的,我认为第二个片段的元素可能不是integer,这就是为什么我试图打印类型。
因此,结果应该是两个片段:

20 40 60 80 100

第二个我没有收到输出。
你能帮助我理解为什么吗?如果你有什么小事我没看到的话,我先向你道歉。连ChatGPT都帮不了我

roejwanj

roejwanj1#

通过使用enumerate,您可以循环遍历索引和项,然后检查索引是否为奇数,以在奇数索引位置显示元素。

my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

for index, item in enumerate(my_list):
    if index % 2 != 0:
        print(item, end=" ")
fnvucqvd

fnvucqvd2#

你应该使用 enumerate(),因为这会在每次迭代中同时给出索引和值。
使用它,你可以解包生成器并在一个步骤中打印(也没有不必要的尾随空间,因为其他一些答案会创建),如下所示:

my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

print(*(v for i, v in enumerate(my_list) if i & 1))

输出:

20 40 60 80 100

注:

您可以通过使用切片来实现正确的输出,而无需测试任何给定索引的奇/偶,如下所示:

print(*my_list[1::2])
z3yyvxxp

z3yyvxxp3#

在第二段代码中,你迭代的是元素,而不是元素的索引。你不能用这种方式计算元素的索引。也许你可以使用枚举,但第一个代码在你的情况下更有用

3phpmpom

3phpmpom4#

欢迎使用Python!
对于您的问题,您正在循环两个不同的列表,如果您在每次迭代中打印该项,您将看到

for index in range(len(my_list)):

索引输出:0,1,2,3,...

for item in my_list:

项目输出:10,20,30,40,50,...
要在第二个循环中修复此问题,请执行

for item in my_list:
    if my_list.index(item) % 2 != 0:
        print(item, end=" ")

编辑:感谢@buran & @slothrop指出错误

相关问题