检查列表中的元素是否存在于python中的多个列表中

时间:2015-10-11 18:36:01

标签: python list python-3.x

我必须检查列表中的元素是否存在于多个列表中。

示例:

cornerCase = [-1, 4]
top = [1, 2]
bottom = [2, 3]
left = [-1, 2]
right = [3,1]

在这种情况下,我必须检查顶部,底部,左侧或右侧列表中的任何元素中是否存在-1或4。寻求更加pythonic方式的解决方案。

我的尝试:

1. 
    check = [i for i in cornerCase if i in top or bottom or left or right]

没用。在or之后实现它寻找其他表达式。

2.
    check = [i for i in cornerCase if i in (top, bottom, left, right)]

该死!没有再工作了。有人请解释原因吗?

3.
    check = [i for i in cornerCase if i in [top, bottom, left, right]]

显然因为检查列表列表中的元素而无效。

我检查if check != [],然后在这些列表中找到-1 or 4

任何好的pythonic方式来实现这一目标? 没有为所有列表寻找包含多个for循环和单独if语句的解决方案。

4 个答案:

答案 0 :(得分:4)

虽然它可能不是一个非常好的解决方案,但它工作简单而且很好,

check = [i for i in cornerCase if i in top + bottom + left + right]

答案 1 :(得分:0)

最简单的方法(也许不是太pythonic)是简单地迭代cornerCase并检查其中任何一个是否在任何其他列表中:

def check(cornerCase, top, left, bottom, right):
  for i in cornerCase:
    if i in top or i in left or i in bottom or i in right:
      return true
  return false

答案 2 :(得分:0)

简单方法: 对于cornerCase中的c:     如果c在顶部或i在左边或i在底部或i在右边:         返回true     否则返回false

OR: 列表= [顶,左,右,下] 对于cornerCase中的c:     如果列表中的c         返回true     否则返回false

答案 3 :(得分:0)

因为它只是想检查是否存在4if check != []:。 python中的任何内置函数都很方便,返回True或False。因此,不需要>>> any(item in l for item in cornerCase for l in (top, bottom, left, right)) True

from xbee import ZigBee
import serial
import MySQLdb

PORT = 'COM4'
BAUD_RATE = 9600

# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)

zb = ZigBee(ser, escaped = True)

#DATA BASE CONNECTION

db = MySQLdb.connect("localhost","b3")

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()

print "Database version : %s " % data


def checkSistem(sistemCode):
    sql = "SELECT count(*) FROM sistema WHERE Codigo = '"+sistemCode+"'"   

    try:
        # Execute the SQL command
        cursor.execute(sql)
        # Fetch all the rows in a list of lists.
        results = cursor.fetchone()
        print results[0] 
    except:
        print "Error: unable to fecth data"    


while True:
    try:
        dataXBee = zb.wait_read_frame() 
        data =  dataXBee['rf_data'].decode("utf-8").split(",")
        checkSistem(data[0])


        print (data[1])

    except KeyboardInterrupt:
        break

Drashan的解决方案也可以正常使用。