Comparar arrays en python

Tengo un problema cuando quiero comparar dos resultados obtenidos de dos consultas sql distintas; ejemplo queryUno[0] y queryDos[0].

Resulta que he intentado utilizar list(set(list1).difference(list2)) y no me dio resultado ya que me imprimió en pantalla esto :

queryUno[0]:
`['A', 'Y', 'C', 'B', 'L']` 

queryDos[0]
['Y', 'C', 'U', 'L']

Y necesito que me imprima los resultados (ejemplo):

queryUno[0]:
Manzana
Peras
Bananas

queryDos[0]:
Manzana
Peras
list(set(queryUno[0]) - set(queryDos[0])) O list(set(queryUno[0]).difference(queryDos[0]))

Como resultado debería entregarme Bananas . Quiero utilizar una funcion en python que me de el mismo resultado que array_diff en PHP.

Agregado:

Gracias a todos por las respuestas. Estoy utilizando Mysql con Python.

  comprobante = Mysql.cursor()
    comprobante_s.execute(comprobante)
    comprobante_sys = comprobante_s.fetchall()
    for items in comprobante_sys:
        items[0]
   list(set(items[0]) - set(queryDos[0]))

He convertido en un conjunto set() y dato que me entrega es :

['Y', 'C', 'U', 'L']

Y necesito que me entregue los datos enteros, citando al ejemplo anterior:

queryUno[0]:
Manzana
Peras
Bananas

queryDos[0]:
Manzana
Peras
list(set(items[0]) - set(queryDos[0]))

Resultado Bananas

1
задан 10.11.2016, 03:46
3 ответа

Если то, что ты хочешь, состоит в том, чтобы он возвратил тебе элементы, которые находятся в каком-то из списков, но не в другой ты можешь использовать метод symmetric_difference() или ^.

a = ['Manzana','Peras','Bananas']
b = ['Manzana','Peras']
print(set(a).symmetric_difference(set(b)))

Он возвращает нас:

{'Bananas'}

Другой пример:

a = ['A', 'Y', 'C', 'B', 'L']` 
b = ['Y', 'C', 'U', 'L']
print(set(a) ^ set(b))

Он возвращает нас:

{'B', 'U', 'A'}

Если ты используешь метод difference() или - он возвращает тебе только элементы, которые находятся в первом списке но не во второй:

a = ['A', 'Y', 'C', 'B', 'L']` 
b = ['Y', 'C', 'U', 'L']
print(set(a) - set(b))

Он возвращает нас:

{'B', 'A'}

Поскольку ты видишь оба, они должны быть set()

Нет каких-то данных как который база данных ты используешь, как ты хранишь и извлекаешь эти данные с базы данных, и т.д.... Для того, чтобы функционировали эти методы, ты должен мочь преобразовывать данные в набор (set()).

С другой стороны list(set(queryUno[0]) - set(queryDos[0])) создай объект (список), который содержит различие между двумя наборами, но не будет печатать тебя ничто, ты нуждался бы в том, чтобы сделать что-то как:

print(list(set(queryUno[0]) - set(queryDos[0])))

Обновление включая пример используя sqlite3:

Я буду создавать базу данных локально (вызов datos.db) с двумя так называемыми подмостками stock1 и stock2. У каждой таблицы есть 3 колонны, которые fruta, kilogramos и cajas. Цель состоит в том, чтобы сравнивать два подмостков используя колонну frutas и печатать те фрукты, которые в stocks1 и не в stocks2:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sqlite3



#Creamos una base de datos llamada datos.db
con = sqlite3.connect('datos.db')

cursor = con.cursor()

#Creamos una tabla llamada stock1 y añadimos 3 filas
cursor.execute('''CREATE TABLE stocks1 (fruta, kilogramos, cajas)''')
items = [('Manzanas','12','4'), ('Peras','10','2'),('Bananas','5','1')]
cursor.executemany('INSERT INTO stocks1 VALUES (?,?,?)', items)

#Creamos una tabla llamada stock1 y añadimos 2 filas
cursor.execute('''CREATE TABLE stocks2 (fruta, kilogramos, cajas)''')
items = [('Manzanas','12','4'), ('Peras','10','2')]
cursor.executemany('INSERT INTO stocks2 VALUES (?,?,?)', items)

con.commit()
con.close()


#Accedemos a nuestra base de datos 
con = sqlite3.connect('datos.db');
cursor = con.cursor()

#Extraemos el primer elemento de cada fila de la tabla stocks1
##y lo almacenamos en la lista queryUno
cursor.execute("SELECT * FROM stocks1")
queryUno = set(row[0] for row in cursor)

#Extraemos el primer elemento de cada fila de la tabla stocks2
##y lo almacenamos en la lista queryDos
cursor.execute("SELECT * FROM stocks2")
queryDos = set(row[0] for row in cursor)

#Comparamos las dos tablas
print(queryUno - queryDos)

con.close()

Это печатает нас:

>>> ['Bananas']

Привет.

3
ответ дан 24.11.2019, 12:40
  • 1
    Я понимаю конвертировал данные целиком set (), но получаю только буквы и полные данные [и #39; И и # 39; и #39; C и # 39; и #39; Или и # 39; и #39; L и # 39;]. Обновите вопрос... –  Nahuel Jakobson 10.11.2016, 03:47

То, что нужно делать, состоит в том, чтобы объявлять два списка:

queryUno=['Manzana', 'Peras', 'Bananas'] и queryDos=['Manzana', 'Peras']

и потом создавать последовательности каждого, substraer queryDos queryUno, и создавать список:

list(set(queryUno) - set(queryDos))

Esepero был тем, что ты ищешь.

2
ответ дан 24.11.2019, 12:40
  • 1
    Я понимаю конвертировал данные целиком set (), но получаю только буквы и полные данные [и #39; И и # 39; и #39; C и # 39; и #39; Или и # 39; и #39; L и # 39;]. Обновите вопрос... –  Nahuel Jakobson 10.11.2016, 03:48

Благодаря всем и в @FJSevilla, окончательно он показывал плохо ее posiciГіn информации, что я extraГ - в базы данных.

queryUno = set(row[0] for row in comprobante_s)

Разместил ее posiciГіn row[13], которые занимают информацию в каждой таблице, и я функционирую совершенно. Потом используйте list(set(queryUno[0]).difference(queryDos[0])) и я получил предложенный результат. Благодаря всем из-за ответов.

0
ответ дан 24.11.2019, 12:40