numpy条件下返回的结果为false

时间:2016-10-31 08:22:33

标签: python numpy

我写了一个小脚本,以便返回一个'字符列表'从值列表中:

值列表:

11
11
14
6
6
14

我的剧本:

# -*- coding:utf-8 -*-

import numpy as np

data = np.loadtxt('/Users/valentinjungbluth/Desktop/produit.txt',
                  dtype = int)


taille = len(data)

for j in range (0, taille) :

    if data[j] == 1 or 2 or 3 or 11 or 12 or 13 :
        print 'cotisation'

    if data[j] == 14 :
        print 'donation'

    else :
        print 'part'

我需要得到的东西:

'cotisation'
'cotisation'
'donation'
'part'
'part'
'donation'

我得到了什么:

cotisation
part
cotisation
part
cotisation
donation

我不知道我在哪里犯了错误.. 如果有人可以阅读我的剧本,也许可以纠正他?

谢谢

4 个答案:

答案 0 :(得分:1)

尝试:

scala> Stream.continually(array).flatten
res0: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> val array = Array(1, 2, 3, 4)
array: Array[Int] = Array(1, 2, 3, 4)

scala> val stream = Stream.continually(array).flatten
stream: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> stream.take(10).foreach(println)
1
2
3
4
1
2
3
4
1
2

答案 1 :(得分:1)

这里有几个问题:

if x == 1 or 2 or 3 or ...没有达到预期效果。

每个子句都是独立评估的,因此python不知道你暗示if x == 1 or x == 2 or x == 3等等。它反而把它解释为if x == 1if 2if 3 ...... if 2之类的内容实际上是python中的一个感性if语句,基本上等于询问if True(所有非零整数值都具有True的“真实性”)。因此,您的陈述实际上等同于if data[j] == 1 or True or True or True or True,后者缩减为if True。换句话说,无论值如何,始终满足条件。你的意思是:

if data[j] == 1 or data[j] == 2 or data[j] == 3 or data[j] == 11 ...

你的if-else结构有两个块,当有一个

目前归结为伪代码中的以下内容:

if some condition:
    print 'something'

now regardless of the first condition, if some other disjoint condition:
    print 'something else'
otherwise:
    print 'does not match other condition'

换句话说,通过使用两个ifs,else所属的第二个if块被视为完全独立于第一个if。因此,满足第一个条件的情况也满足else,这听起来不是你想要的,因为每个字符应该只打印一次。如果您希望它是3个不相交的情况,则需要使用elif代替所有它被视为单个块的一部分:

E.g。

if condition:
    print 'something'
elif other condition:
    print 'something else'
else:
    print 'does not match EITHER of the two above condtions'

答案 2 :(得分:0)

Scimonster在代码中指出了你的第一个问题,你需要elif for second。

第二个问题是或部分,你的if条件正在解释为

 if (data[j] == 1) or 2 or 3 or 11 or 12 or 13

你可以修改它们,如下所示

if data[j] in [1, 2, 3, 11, 12, 13] :
    print 'cotisation'
elif data[j] == 14 :
    print 'donation'
else :
    print 'part'

答案 3 :(得分:-1)

if data[j] == 1 or 2 or 3 or 11 or 12 or 13 :
    print 'cotisation'

if data[j] == 14 :
    print 'donation'

else :
    print 'part'

此处有两个单独的if,其中一个有else。它们应该一起流动,所以第二个应该是elif