在Python中,使用in获取特定元素

3 投票
4 回答
2580 浏览
提问于 2025-04-16 17:05

我想在Python中做类似这样的事情:

从[list]中选择所有数据,条件是[index n]的元素等于'hello'

到目前为止,我有这个

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

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

这段代码给我返回了包含'hello'的单元格的索引列表,但我觉得还有更简单(更符合Python风格)的方法可以做到这一点。

如果能有一行代码直接返回等于' '的单元格数量,那就太好了。

4 个回答

3
[i for i in range(len(cells)) if cells[i] == "hello"]

或者

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

我不太确定你是想从一个列表中返回匹配的元素(标题是“在Python中,使用in获取特定元素”),还是想统计它们出现的次数。你可以使用 filter 函数或者列表推导式 来从列表中返回匹配的元素,然后对结果使用 len 来计算它们出现的次数。如果你只关心某个项目在列表中出现的次数,使用 list.count 是最简单的方法。

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

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

而且在这里的回答中(如果你只是想统计它们,这绝对是最简单的方法!): cells.count('hello')

下面是列表推导式和filter的简单对比:

% 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
5

你的问题有点让人困惑。你的代码并不是在获取空单元格的索引,而是在获取元素 hello 的索引。

看起来你有两个问题合在一起了?

如果你真的想要获取“空单元格”的数量,就像你最后一句话说的那样,你可以使用 list.count

empty_spots = cells.count(' ')

撰写回答