如何在 python 中使用 OnClick 事件保存列表以将它们添加到单个列表中并获得交集
How to save list with OnClick event in python to add them in a single list and get intersection
已编辑:
我想在 python 中找到多个列表的交集。所以首先我将添加它们以制作一个列表(列表列表),然后我使用交集函数。
让我解释一下这里发生了什么:
单击第一个按钮 - 您将从数据库 table [1, 6, 7, 8]
中获得一个列表
现在我必须在空白处添加这个 list.So 当点击第一个按钮时它应该给你相同的列表 [[1, 6, 7, 8]] 因为只有一个列表添加。
我得到 [[1, 6, 7, 8]]
第二次单击按钮 - 从数据库 [1, 2, 5, 6, 7, 8] 中获取列表
现在点击第二个按钮,我应该得到 [[1, 6, 7, 8],[1, 2, 5, 6, 7, 8]]
但我得到的是 [[1, 2, 5, 6, 7, 8]]
第三次单击按钮 - 得到一个列表 [2, 4, 7, 8]
点击第三个按钮后 [[1, 6, 7, 8],[1, 2, 5, 6, 7, 8],[2, 4, 7, 8]]
但我得到 [[2, 4, 7, 8]]
等等,这取决于用户 select 按钮的数量,我们不知道他可以 select 多少按钮。
应用交集函数后的输出 [7,8]
所以最后我可以有 n 个列表,我已经添加它们并得到 listoflists.When 我 运行 下面的代码它给了我上面提到的输出 above.I 已经写了完整的代码,以便您了解我的 database.But 我的问题与 On Click 事件中的追加和交集有关
self.conn = sqlite3.connect('RAMAN.db')
for row_id in range(1,11):
for col_id in range(1,19):
print row_id,col_id
cursor= self.conn.execute("SELECT * FROM ELEMENT where ROW_NO==%d AND COLUMN_NO==%d"%(row_id,col_id))
if(cursor==None):
gs.Add(wx.StaticText(p,-1,''))
else:
elements = cursor.fetchall()
if(elements==None or len(elements)==0):
gs.Add(wx.StaticText(p,-1,''))
else:
print elements[0]
btn = wx.Button(p, -1,str(elements[0][1]), (10,20))
btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
gs.Add(btn, -1, wx.EXPAND)
self.btn=wx.Button(p,-1,"Search!")
bs.Add(self.btn,0,wx.ALIGN_CENTER)
def OnClick(self, event):
name = event.GetEventObject().GetLabelText()
cursor= self.conn.execute("SELECT * FROM ELEMENT where SYMBOL==?", (name,))
elements = cursor.fetchall()
print elements
cursor= self.conn.execute("SELECT ATOMIC_NUMBER FROM ELEMENT where SYMBOL = ?", (name,))
numbers = cursor.fetchone()[0]
print numbers
atomicnumber = numbers
cursor= self.conn.execute("SELECT MOL_NUMBER FROM LINK where ELEMENT_NUMBER = ?", (atomicnumber,))
mnumbers = cursor.fetchall()
print mnumbers
mnum_list = []
for i in mnumbers:
mnum_list.append(i[0])
print mnum_list
combinations = atomicnumber
inter_list = []
inter_list.append(mnum_list)
print inter_list
#print list(set.intersection(*map(set,inter_list))
如果顺序对你来说不重要,你可以试试这个。
l1 =[1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
l3= [2, 4, 7, 8]
inter = list(set(l1)&set(l2)&set(l3))
print(inter)
输出:
[8, 7]
编辑: 如果您说将有 n
个列表,则正如 OP 所希望的那样。获取它们并将它们存储在列表列表中。
l1 =[1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
l4= [6,3,7,8]
l5= [1,7,8]
l3= [2, 4, 7, 8]
listoflist = [l1,l2,l3,l4,l5]
a = listoflist[0] #Assign the first element of listoflist to `a`
for l in listoflist:
a=set(a)&set(l)
inter = list(a)
print(inter)
输出:
[8, 7]
您有多个列表如下,
l1 = [1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
.
.
ln = [2, 4, 7, 8]
mylist = []
result = l1
for i in range(1,n):
mylist.append(locals()['l{}'.format(i)])
for s in mylist:
result = result.intersection(s)
print result
这将首先连接所有列表,然后找到它们之间的交集。
这里我们必须在 On Click 事件之外创建 inter_list。这样:
self.inter_list = list()
def OnClick(self, event):
name = event.GetEventObject().GetLabelText()
cursor= self.conn.execute("SELECT * FROM ELEMENT where SYMBOL==?", (name,))
elements = cursor.fetchall()
print elements
cursor= self.conn.execute("SELECT ATOMIC_NUMBER FROM ELEMENT where SYMBOL = ?", (name,))
numbers = cursor.fetchone()[0]
atomicnumber = numbers
cursor= self.conn.execute("SELECT MOL_NUMBER FROM LINK where ELEMENT_NUMBER = ?", (atomicnumber,))
mnumbers = cursor.fetchall()
print mnumbers
mnum_list = []
for i in mnumbers:
mnum_list.append(i[0])
print mnum_list
self.inter_list.append(mnum_list)
print self.inter_list
self.molecule_list=list(set.intersection(*map(set,self.inter_list)))
print self.molecule_list
self.t1.AppendText(str(elements[0][0]))
self.t1.AppendText("\n")
已编辑: 我想在 python 中找到多个列表的交集。所以首先我将添加它们以制作一个列表(列表列表),然后我使用交集函数。 让我解释一下这里发生了什么: 单击第一个按钮 - 您将从数据库 table [1, 6, 7, 8]
中获得一个列表现在我必须在空白处添加这个 list.So 当点击第一个按钮时它应该给你相同的列表 [[1, 6, 7, 8]] 因为只有一个列表添加。
我得到 [[1, 6, 7, 8]]
第二次单击按钮 - 从数据库 [1, 2, 5, 6, 7, 8] 中获取列表
现在点击第二个按钮,我应该得到 [[1, 6, 7, 8],[1, 2, 5, 6, 7, 8]]
但我得到的是 [[1, 2, 5, 6, 7, 8]]
第三次单击按钮 - 得到一个列表 [2, 4, 7, 8]
点击第三个按钮后 [[1, 6, 7, 8],[1, 2, 5, 6, 7, 8],[2, 4, 7, 8]]
但我得到 [[2, 4, 7, 8]]
等等,这取决于用户 select 按钮的数量,我们不知道他可以 select 多少按钮。
应用交集函数后的输出 [7,8]
所以最后我可以有 n 个列表,我已经添加它们并得到 listoflists.When 我 运行 下面的代码它给了我上面提到的输出 above.I 已经写了完整的代码,以便您了解我的 database.But 我的问题与 On Click 事件中的追加和交集有关
self.conn = sqlite3.connect('RAMAN.db')
for row_id in range(1,11):
for col_id in range(1,19):
print row_id,col_id
cursor= self.conn.execute("SELECT * FROM ELEMENT where ROW_NO==%d AND COLUMN_NO==%d"%(row_id,col_id))
if(cursor==None):
gs.Add(wx.StaticText(p,-1,''))
else:
elements = cursor.fetchall()
if(elements==None or len(elements)==0):
gs.Add(wx.StaticText(p,-1,''))
else:
print elements[0]
btn = wx.Button(p, -1,str(elements[0][1]), (10,20))
btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
gs.Add(btn, -1, wx.EXPAND)
self.btn=wx.Button(p,-1,"Search!")
bs.Add(self.btn,0,wx.ALIGN_CENTER)
def OnClick(self, event):
name = event.GetEventObject().GetLabelText()
cursor= self.conn.execute("SELECT * FROM ELEMENT where SYMBOL==?", (name,))
elements = cursor.fetchall()
print elements
cursor= self.conn.execute("SELECT ATOMIC_NUMBER FROM ELEMENT where SYMBOL = ?", (name,))
numbers = cursor.fetchone()[0]
print numbers
atomicnumber = numbers
cursor= self.conn.execute("SELECT MOL_NUMBER FROM LINK where ELEMENT_NUMBER = ?", (atomicnumber,))
mnumbers = cursor.fetchall()
print mnumbers
mnum_list = []
for i in mnumbers:
mnum_list.append(i[0])
print mnum_list
combinations = atomicnumber
inter_list = []
inter_list.append(mnum_list)
print inter_list
#print list(set.intersection(*map(set,inter_list))
如果顺序对你来说不重要,你可以试试这个。
l1 =[1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
l3= [2, 4, 7, 8]
inter = list(set(l1)&set(l2)&set(l3))
print(inter)
输出:
[8, 7]
编辑: 如果您说将有 n
个列表,则正如 OP 所希望的那样。获取它们并将它们存储在列表列表中。
l1 =[1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
l4= [6,3,7,8]
l5= [1,7,8]
l3= [2, 4, 7, 8]
listoflist = [l1,l2,l3,l4,l5]
a = listoflist[0] #Assign the first element of listoflist to `a`
for l in listoflist:
a=set(a)&set(l)
inter = list(a)
print(inter)
输出:
[8, 7]
您有多个列表如下,
l1 = [1, 6, 7, 8]
l2= [1, 2, 5, 6, 7, 8]
.
.
ln = [2, 4, 7, 8]
mylist = []
result = l1
for i in range(1,n):
mylist.append(locals()['l{}'.format(i)])
for s in mylist:
result = result.intersection(s)
print result
这将首先连接所有列表,然后找到它们之间的交集。
这里我们必须在 On Click 事件之外创建 inter_list。这样:
self.inter_list = list()
def OnClick(self, event):
name = event.GetEventObject().GetLabelText()
cursor= self.conn.execute("SELECT * FROM ELEMENT where SYMBOL==?", (name,))
elements = cursor.fetchall()
print elements
cursor= self.conn.execute("SELECT ATOMIC_NUMBER FROM ELEMENT where SYMBOL = ?", (name,))
numbers = cursor.fetchone()[0]
atomicnumber = numbers
cursor= self.conn.execute("SELECT MOL_NUMBER FROM LINK where ELEMENT_NUMBER = ?", (atomicnumber,))
mnumbers = cursor.fetchall()
print mnumbers
mnum_list = []
for i in mnumbers:
mnum_list.append(i[0])
print mnum_list
self.inter_list.append(mnum_list)
print self.inter_list
self.molecule_list=list(set.intersection(*map(set,self.inter_list)))
print self.molecule_list
self.t1.AppendText(str(elements[0][0]))
self.t1.AppendText("\n")