【问题标题】:in python, using in, get specific elements在python中,使用in,获取特定元素
【发布时间】:2011-05-05 22:40:30
【问题描述】:

我想做这样的事情,但是在 python 中:

select * from [list] where [element at index n] = 'hello'

到目前为止,我有这个

    cells = [' ','hello',' ',' ',' ',' ',' ',' ',' ']
    emptySpots = []

    for s in range(len(cells)):
        if cells[s] == 'hello':
            emptySpots.append(s)

这给了我一个包含“你好”的单元格的索引列表,但我敢打赌,有一种更直接(pythonesque)的方式来做到这一点。

最好是一个单行,它只返回单元格中等于“”的元素数量的计数。

【问题讨论】:

    标签: python list


    【解决方案1】:

    您的问题令人困惑。您的代码没有获取空单元格的索引,而是获取元素 hello 的索引。

    您似乎有两个问题合二为一?

    如果你真的想得到你在最后一句话中声称的“空单元格”的数量,你可以使用list.count

    empty_spots = cells.count(' ')
    

    【讨论】:

    • 帖子中有两个不相关的问题。我回答了第一个,你回答了第二个。
    • 是的,我确实以一种令人困惑的方式提问,抱歉。基本上,我的问题可以通过选择空单元格或非空单元格来解决。我不知道 count() 可以按照您展示的方式工作,并且从那里我能够让它做我想做的事。谢谢。
    【解决方案2】:

    我不确定您是要从列表中返回匹配元素的列表(标题为“在 python 中,使用 in,获取特定元素”),还是要计算它们的所有出现次数。您可以使用filterlist comprehension 从列表中返回匹配的元素,然后在结果上调用len 来计算它出现的次数。如果您只关心查找某个项目在列表中出现的次数,list.count 是最好的方法。

    len(filter(lambda x: 'hello' == x, cells))

    len([x for x in cells if x == 'hello'])

    正如here 所回答的那样(如果您只想计算它们,这绝对是最好的方法!): cells.count(' ')

    这是一个简单的列表理解与过滤器:

    % python -m timeit -s "data = ['hello' for x in range(100000)]" "[x for x in data if x == 'hello']"
    100 loops, best of 3: 6.97 msec per loop
    % python -m timeit -s "data = ['hello' for x in range(100000)]" "filter(lambda x: x == 'hello', data)"
    100 loops, best of 3: 13.3 msec per loop
    

    【讨论】:

    • 这个不返回索引。请再次阅读问题。
    • 我以为他只是想计算列表中的重复项。
    • @SvenMarnach:很公平,但是 OP 可能错误地解释了他的问题,因为他的代码没有返回密钥。
    • @SvenMarnach:我投了反对票,恕我直言,这个问题还不够清楚,无法投反对票,而且@zeekay 更新了他的答案。
    • 嗯,标题是“在python中,使用in,获取特定元素”。这就是我认为他最初所追求的。无论哪种方式,很高兴了解过滤器/列表推导式。
    【解决方案3】:
    [i for i in range(len(cells)) if cells[i] == "hello"]
    

    [i for i, s in enumerate(cells) if s == "hello"]
    

    【讨论】:

    • 哦,伙计,这对我来说是新的,必须使用这种语法。谢谢。
    【解决方案4】:

    这个怎么样?

    cells = [' ','hello',' ',' ',' ',' ',' ',' ',' ']
    matches = map(lambda x: x if cells[x] == 'hello' else False, range(len(cells)))
    emptySpots = filter(lambda x: x == False, matches)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多