<p>如果您使用的是python3.4+,枚举实际上对此非常有用。下面是几个你可以做的例子:</p>
<pre><code>import random
from enum import Enum
from collections import namedtuple
class Color(Enum):
blue = 'blue'
red = 'red'
green = 'green'
Car = namedtuple('Car', ('color', 'length'))
cars = [Car(Color.blue, 10),
Car(Color.blue, 3),
Car(Color.blue, 9),
Car(Color.red, 9),
Car(Color.red, 7),
Car(Color.red, 8),
Car(Color.green, 3),
Car(Color.green, 7),
Car(Color.green, 2),
Car(Color.green, 8),
]
print('# of blue cars:', sum(1 for car in cars if car.color == Color.blue))
print('# of cars with length between 3 and 7:',
sum(1 for car in cars if 3 <= car.length <= 7))
random_color = random.choice(tuple(Color))
lower_limit = random.randint(1,10)
upper_limit = random.randint(lower_limit,10)
print('# of {} cars with length {} to {} (inclusive):'.format(random_color.name,
lower_limit,
upper_limit),
sum(1 for car in cars if car.color == random_color
and lower_limit <= car.length <= upper_limit))
important_colors = (Color.blue, Color.green)
important_lengths = (1,2,3,5,7)
print('Number of cars that match some contrived criteria:',
sum(1 for car in cars if car.color in important_colors
and car.length in important_lengths))
</code></pre>
<p>如果你说的是连续范围,<code>lower < value < upper</code>是一个很好的检查方法。若您有离散值(如颜色),您可以创建一个有趣的颜色集合,并检查该集合中的成员资格。还要注意的是,您可以很容易地使用可变的箱子大小。你知道吗</p>
<p>如果您对简单的计数感兴趣,还可以使用<a href="https://docs.python.org/3.5/library/itertools.html#itertools.groupby" rel="nofollow">^{<cd2>}</a>。请注意,如果您的项目是引用对象,则更改一个集合中的某个项目将更改另一个集合中的某个项目:</p>
<pre><code>In [15]: class Simple:
....: def __init__(self, name):
....: self.name = name
....: def __repr__(self):
....: return 'Simple(name={!r})'.format(self.name)
....:
In [16]: values = [Simple('one'), Simple('two'), Simple('three')]
In [17]: one = (values[0], values[-1])
In [18]: two = tuple(values[:2])
In [19]: one
Out[19]: (Simple(name='one'), Simple(name='three'))
In [20]: two
Out[20]: (Simple(name='one'), Simple(name='two'))
In [21]: one[0].name = '**changed**'
In [22]: one
Out[22]: (Simple(name='**changed**'), Simple(name='three'))
In [23]: two
Out[23]: (Simple(name='**changed**'), Simple(name='two'))
</code></pre>