我必须检查列表中的元素是否存在于多个列表中。
示例:
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
语句的解决方案。
答案 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)
因为它只是想检查是否存在4
或if 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的解决方案也可以正常使用。