Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将值保存到列表中并发送到函数_Python_List_For Loop - Fatal编程技术网

Python 将值保存到列表中并发送到函数

Python 将值保存到列表中并发送到函数,python,list,for-loop,Python,List,For Loop,因此,我试图创建一个脚本,在其中循环遍历一个文本文件,希望能够保存txt文件中的所有值,然后将其发送到函数中。我将在下面的代码之后解释它: randomnames.txt Alejandro   Tisha   Eleni   Milton   Jeanice   Billye   Vicki   Shelba   Valorie   Penelope   Mellissa   Ambrose   Retta   Milissa   Charline   Brittny   Ehtel   H

因此,我试图创建一个脚本,在其中循环遍历一个文本文件,希望能够保存txt文件中的所有值,然后将其发送到函数中。我将在下面的代码之后解释它:

randomnames.txt

Alejandro  
Tisha  
Eleni  
Milton  
Jeanice  
Billye  
Vicki  
Shelba  
Valorie  
Penelope  
Mellissa  
Ambrose  
Retta  
Milissa  
Charline  
Brittny  
Ehtel  
Hilton  
Hobert  
Lakendra  
Silva  
Lawana  
Sidney  
Janeen  
Audrea  
Orpha  
Peggy  
Kay  
Marvis  
Tia  
Randy  
Cary  
Santana  
Roma  
Mandi  
Tyrone  
Felix  
Maybelle  
Leonia  
Micha  
Idalia  
Aleida  
Elfrieda  
Velia  
Cassondra  
Drucilla  
Oren  
Kristina  
Madison  
Dia  


names.txt

Alejandro
Tisha
Eleni
Dia
Hobert

该程序目前的工作原理是检查randomnames.txt中的所有名称,并检查其中是否有与names.txt中的名称匹配的名称。如果有匹配,它将打印出有匹配,如果没有,它将只执行sys.exit(这将终止线程)

然而,我的问题在于

if not new_names_list == old_names_list:
                    for i in new_names_list:
                        if not i in old_names_list:
                            threading.Thread(target=filter, args=(new_thread, i)).start()
                            if new_thread not in old_list:
                                old_list.append(new_thread)

                elif new_thread not in old_list:
                    threading.Thread(target=filter, args=(new_thread, new_names_list)).start()
                    old_list.append(new_thread)
我认为问题在于它运行了很多线程,因为它从names.txt中获取一个名称,并在randomnames.txt中逐个检查所有名称(线程)。这意味着,如果randomnames.txt中有50个名称,它将创建50个线程,检查randomnames.txt中的任何名称是否与names.txt中的名称匹配。如果匹配,则会打印出匹配项。问题是只需要创建一个名称的50个线程,这意味着它将为下面的新名称添加另外50个线程


我认为这是一个问题,如何解决这个问题是,如果可能将names.txt中的所有名称添加到一个列表中,然后将其发送到filter(),在filter()中检查names.txt中是否有任何名称与orig post中的randomnames.txt中的名称匹配,那么代码就过于复杂了。基本上,您是在比较两个名称集合的匹配项。这是集合论,您应该使用Python集合,而不是列表。考虑:

names = {'Bob', 'Cindy', 'Dave'}
other_names = {'Lou', 'Pete', 'Cindy'}
print(names & other_names)  # {‘Cindy’}

请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。你所发布的内容,充其量只定义了两个函数,并在不调用其中任何一个函数的情况下退出:没有主程序,没有输出,等等。我相信对于未定义的包,它会失败。哦,好吧,那么我可能需要在这种情况下随时重新创建一个新线程)谢谢@Prune。还有,我很抱歉。还有,为什么你要分出一个新的线程,而不是简单地在一个线程中迭代名称?这不会需要更长的时间,因为它只是一个接一个地运行,而不是给它一个线程@一点也不——与简单的迭代相比,启动一个新线程的开销是巨大的。我还相信我已经把所有事情都复杂化了。你是否可以或者有时间给我一些建议,告诉我应该做什么,或者你是否可以提供一个我应该如何做编码的例子?
names = {'Bob', 'Cindy', 'Dave'}
other_names = {'Lou', 'Pete', 'Cindy'}
print(names & other_names)  # {‘Cindy’}