2

我有一个列表T = [[2,5],[4,7],[8,6],[34,74],[32,35],[24,7],[12,5],[0,34]],我想检查 T 内每个嵌入列表中的所有元素是否满足不等式。

到目前为止,我有:

upper = 10
lower = 0
for n in range(len(T)):
    if all(lower < x < upper for x in T):
        'do something'
    else:
        'do something different'

因此,如果每个 T[n] 中的所有元素都在 0 到 10 之间,我想做一些事情,如果不是,那么我想做其他事情。在上面的 T[0] 列表中,T[1] 和 T[2] 将满足不等式,而 T[3] 则不会。

4

4 回答 4

6

你快到了。只需替换range(len(T))T迭代T列表并检查 if 条件中的嵌套元素,如下所示:

>>> T = [[2,5],[4,7],[8,6],[34,74],[32,35],[24,7],[12,5],[0,34]]
>>> upper = 10
>>> lower = 0
>>> for elem in T:
        if all(lower < x < upper for x in elem):
            print "True", elem
        else:
            print "False", elem


True [2, 5]
True [4, 7]
True [8, 6]
False [34, 74]
False [32, 35]
False [24, 7]
False [12, 5]
False [0, 34]
于 2013-08-12T14:32:17.123 回答
2

我会避免复杂的代码并选择numpy

a = np.array(T)

test = (a>0) & (a<10)
#array([[ True,  True],
#       [ True,  True],
#       [ True,  True],
#       [False, False],
#       [False, False],
#       [False,  True],
#       [False,  True],
#       [False, False]], dtype=bool)

test.all(axis=1)
#array([ True,  True,  True, False, False, False, False, False], dtype=bool)

您可以将其作为列表调用重用test.any(axis=1).tolist()

于 2013-08-12T14:43:53.197 回答
1

是的,我也会选择 numpy:

import numpy as np

T = [[2,5],[4,7],[8,6],[34,74],[32,35],[24,7],[12,5],[0,34]]
T = np.array(T)
for t in T:
    if np.all(t>0) & np.all(t<10):
        print t
    else:
        print 'none'

[2 5]
[4 7]
[8 6]
none
none
none
none
none
于 2013-08-12T15:04:28.780 回答
0

您还可以使用列表理解获取索引列表和检查条件:

>>> T = [[2,5],[4,7],[8,6],[34,74],[32,35],[24,7],[12,5],[0,34]]
>>> upper = 10
>>> lower = 0
>>> result = [(i, all(lower < x < upper for x in l)) for i, l in enumerate(T)]
[(0, True), (1, True), (2, True), (3, False), (4, False), (5, False), (6, False), (7, False)]
于 2013-08-12T14:38:40.317 回答