2011-05-05 95 views
3

我想要做这样的事情,但是在Python:在python,使用,获取特定元素

SELECT * FROM [表],其中[索引N元素] = '你好'

所以到目前为止,我有这个

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

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

这使我的细胞的索引列表与他们“你好”,但我敢打赌,那里有一个更straightforeward(pythonesque)的方式来做到这一点。

什么是更好的是一个单一的班轮只是返回等于''的单元格数量的计数。

回答

5

你的问题是co nfusing。您的代码不会得到空单元的索引,而是元素hello

看来你有两个问题在一个吗?

如果你真的想要得到“空单元”的数量就像你在你的最后一句话权利要求,可以使用list.count

empty_spots = cells.count(' ') 
+0

这篇文章中有两个无关的问题。我回答了第一个,你回答了第二个。 – 2011-05-05 22:48:26

+0

@SvenMarnach:让我们看看OP有什么话要说...... – Trufa 2011-05-05 22:52:56

+0

雅,我有点疑惑地问道,对不起。基本上,我的问题可以通过选择空或非空单元来解决。我不知道伯爵()可以按照你展示的方式工作,并且从那里我能够做到我想要的。谢谢。 – jason 2011-05-05 23:11:07

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

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

O男人,这对我来说是新的,将不得不玩这个语法。谢谢。 – jason 2011-05-05 23:11:50

4

我不知道,如果你想从列表中返回匹配的元素列表(标题是“在Python,使用,获取特定元素”),或者如果你想计算它们的所有事件。您可以使用filterlist comprehension从列表中返回匹配的元素,然后对结果调用len来计算它发生的次数。如果你所关心的是找到一个项目出现在列表中的次数,list.count是最好的方法。

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

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

而作为回答here(绝对,如果你只是想指望他们的最好方式!): cells.count(' ')

这里的列表理解VS过滤器的一个简单的板凳:

% 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 
+0

任何人都想比较性能? – 2011-05-05 22:44:05

+0

这一个不返回索引。请再次阅读该问题。 – 2011-05-05 22:44:22

+0

我以为他只是想计算清单中的经常性项目。 – zeekay 2011-05-05 22:50:04

1

这个怎么样?

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

这是扭曲的。 – Trufa 2011-05-05 22:55:04

+0

哈哈是的。我喜欢。谢谢! – jason 2011-05-05 23:14:12