如何在python中使用OnClick事件保存列表,以将它们添加到单个列表中并获得交集



编辑: 我想在 python 中找到多个列表的交集。所以首先我将添加它们以制作一个列表(列表列表),然后我使用交集功能。 让我解释一下这里发生的事情: 第一个按钮点击 - 您将从数据库表中列出 [1, 6, 7, 8]

现在我必须将其添加到空白列表中。因此,当单击第一个按钮时,它应该为您提供相同的列表 [[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]]

依此类推取决于用户选择的按钮数量,我们不知道他可以选择多少个按钮。

应用相交函数后的输出 [7,8]

所以最后我可以有 n 个列表,我已经添加它们并得到列表列表。当我运行下面的代码时,它会为我提供如上所述的输出。我已经编写了完整的代码,以便您了解我的数据库。但我的问题与点击事件中的追加和交集有关

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]

编辑:正如OP所希望的那样,如果你说会有n数量的列表。获取它们并将它们存储在列表列表中。

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") 

相关内容

  • 没有找到相关文章

最新更新