如何为另一个列表中找到的一个列表中的项目返回真/假

时间:2019-03-29 17:18:58

标签: python numpy

我正在尝试使用一个包含两个列表的函数,并创建一个与第一个列表一样长的新列表,如果在第二个列表中找到列表中的每个项目,则返回True或False。如果我要使用大列表,我还会合并使用numpy。

我尝试了以下操作,但无法产生想要的结果。感谢您的协助。

---------------------------------
| Zone | Location | OrderNumber |
---------------------------------
| 1    | A        | 1           |
| 1    | B        | 2           |
| 1    | C        | 3           |
| 1    | D        | 4           |
| 1    | E        | 5           |
| 2    | A        | NULL        |
| 2    | B        | NULL        |
| 2    | C        | NULL        |
| 2    | D        | NULL        |
| 2    | E        | NULL        |
---------------------------------
import numpy as np

def a_is_in(a, b):
    list1 = np.array(a)
    list2 = np.array(b)
    if list1 in list2:
        return False
    else:
        return True
    return

a = [3, 4, 8, 10, 11, 13]
b = [3, 6, 7, 13]
_is_in = a_is_in(a, b)
print(_is_in)

我正在寻找的返回结果是一个看起来像这样的列表: [正确,错误,错误,正确,错误,正确]

谢谢您的时间。

3 个答案:

答案 0 :(得分:2)

如果您使用的是numpy,则可以使用 #include <SPI.h> #include "mcp_can.h" #include <SoftwareSerial.h> SoftwareSerial mySerial (3,2); // the cs pin of the version after v1.1 is default to D9 // v0.9b and v1.0 is default D10 const int SPI_CS_PIN = 9; MCP_CAN CAN(SPI_CS_PIN); // Set CS pin void setup() { Serial.begin(9600); mySerial.begin(9600); START_INIT: if(CAN_OK == CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k { Serial.println("CAN BUS Shield init ok!"); } else { Serial.println("CAN BUS Shield init fail"); Serial.println("Init CAN BUS Shield again"); delay(100); goto START_INIT; } } void loop() { unsigned char len = 0; unsigned char buf[8]; if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming { CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf // unsigned char canId = CAN.getCanId(); unsigned long canId = CAN.getCanId(); // canHex = 18FFF227; Serial.println("-----------------------------"); Serial.println("get data from ID: "); if (canId == 0x18FFF227) { Serial.println(canId, HEX); // Serial.println(canId); mySerial.println("-----------------------------"); mySerial.println("get data from ID: "); mySerial.println(canId,HEX); //if(buf[0] == 2){ // for(int i = 0; i<len; i++) // print the data // { // Serial.print(buf[i], HEX); // mySerial.print(buf[i], HEX); // Serial.print("\t"); // mySerial.print("\t"); // } // } // if 2 // } // if 1 Serial.print(buf[5],HEX); Serial.print(buf[4],HEX); Serial.print(buf[3],HEX); Serial.print(buf[2],HEX); Serial.println(); } } 函数。

np.isin

答案 1 :(得分:1)

您可以使用简单的列表理解并将i in b用作返回TrueFalse的条件

第一个示例

a = [3, 4, 8, 10, 11, 13]
b = [3, 6, 7, 13]
_is_in = [i in b for i in a]
print(_is_in)
# [True, False, False, False, False, True]

第二个示例

a = [3, 4, 8, 10, 11, 13]
b = [3, 6, 7, 10, 13]
_is_in = [i in b for i in a]
print(_is_in)
# [True, False, False, True, False, True]

答案 2 :(得分:1)

我尝试使用一种简单的语法来做到这一点(作为一个初学者,我宁愿不要太过分)。 但是我认为为此使用for循环可能会有点太繁琐,并且可能还有其他更简单的选择。

def a_is_in(a, b):
    result =[]
    for i in range(0,len(a)):
        if a[i] in b:
            result.append(True)
        else:
            result.append(False)
    return(result)