【问题标题】:skip items while iterating over list遍历列表时跳过项目
【发布时间】:2020-11-14 19:46:25
【问题描述】:

我一直在从一个 txt 文件中读取类对象并将信息存储在一个列表中。我的问题是如果我想打印出第一个属性但跳过一行是否有可能。说文本文件是这样的:

    Activity Time  Location
    Football  8-9  Pitch
    Basketball 9-10  Gym
    Lunch  11-12  Home
    Reading  13-14  Library

我想做一个 for 循环,给我列表的第一个属性但跳过一行。例如写作:

for i in list:
    print(i.activity) 

#给我所有的活动,但我想要足球,午餐,没有篮球的阅读

这可能吗?如果是这样,我将不胜感激一个简单的代码。我不需要任何高级的东西

【问题讨论】:

  • 也许是for i in your_list[::2]:?这将遍历列表中的所有其他项目。不要使用list 作为名称,它是一个内置函数。
  • 我的清单比我写的要大。我刚刚写了一个例子,所以 [::2] 会跳过比我想要的更多的元素。
  • 你想跳过的只是一个索引吗?还是很多,在不同的位置?
  • 一个特定的索引,然后我希望一切继续

标签: python arrays python-3.x list slice


【解决方案1】:

是的,但是你应该将你的 python 列表命名为 list 以外的其他名称,因为 list 是 python 中的一个关键字:

row_to_skip=1

for i in range (len (my_list)):
    item=my_list[i]
    if (i==row_to_skip):
        continue
    print(item.activity)

【讨论】:

  • 友好的建议,如果可以的话。此行:range (0, len (my_list)) 应为:range(len(my_list))。因为rangelen 都是函数,而range 的默认起点为零。
  • 我同意!它更优雅。
  • 这太棒了!只有一个问题:我的列表包含不同的时间,例如足球 8-9,我仍然想像你一样跳过第二行但是我想添加我的条件,例如:如果用户写他在 8 点来,则打印出足球并在 9 点离开。我在放置输入的位置创建了两个变量,但它没有工作,所有内容都被打印出来(跳过的行除外)。你知道我该如何解决这个问题吗?
【解决方案2】:

当然可以:

在循环中添加条件

i = 0
for item in list:
    if i!=1:
        print (item.activity)
    i += 1
        
    

所以在第二次迭代中不会打印任何内容

【讨论】:

  • 谢谢,你能举个例子吗?我是这样写的: for i in list: if i == 1: continue print(i.activity) #但没有打印出来
  • @Rezaamin 也许你在continue下面有i += 1,在这种情况下i永远不会超过1?而不是像上面那样做,试试for i, item in enumerate(list):,然后你不必自己增加(或初始化)i
  • 我上面那位是对的 - 确保 i 的初始化无论如何都完成了,不管怎么做,你可以按照他的建议或我做的做
  • @jmd_dk 我确实喜欢这个,但它没有跳过我想要的行。我打印了所有属性。对于 i, item in enumerate(djur): if i != 2: print(item.activity)
【解决方案3】:

下面的示例仅读取文本字符串 (text_),并使用 list.pop() 函数删除第二个元素(在标题之后)。在本例中,为“篮球”行。

然后,另一个简单的列表推导式创建 activities 列表,其中包含每行的第一个元素,并跳过标题行。

示例代码:

text = [i.strip().split(',') for i in text_]
text.pop(2)

activities = [i[0] for i in text[1:]]

输出:

['Football', 'Lunch', 'Reading']

设置:

注意:此块不是功能所必需的。仅用于从字符串创建text_ 列表。

import io

txt = """Activity,Time,Location
Football,8-9,Pitch
Basketball,9-10,Gym
Lunch,11-12,Home
Reading,13-14,Library
"""

with io.StringIO(txt) as h:
    text_ = list(h)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多