gpt4 book ai didi

python - 将值保存到列表中并将其发送到函数

转载 作者:行者123 更新时间:2023-12-01 08:34:55 24 4
gpt4 key购买 nike

所以我试图创建一个脚本,在其中循环遍历一个文本文件,我希望能够保存 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
<小时/>
import json, time, sys, os, timeit, random, colorama, requests, traceback, multiprocessing, re
from random import choice
import threading


def get_names():

name_test = [line.rstrip('\n') for line in open('randomnames.txt')]
return name_test

def filter(thread, i):

text = thread

positive_keywords = [i]

has_good = False

for ch in ['&', '#', '“', '”', '"', '*', '`', '*', '’', '-']:
if ch in text:
text = text.replace(ch, "")

sentences = [text]

def check_all(sentence, ws):
return all(re.search(r'\b{}\b'.format(w), sentence) for w in ws)

for sentence in sentences:
if any(check_all(sentence, word.split('+')) for word in positive_keywords):
has_good = True
break

if not has_good or i == "":
sys.exit()

print('Matched ' + text)

def main():
old_list = []

old_names_list = []

while True:

new_names_list = [line.rstrip('\n') for line in open('names.txt')]
for new_thread in get_names():

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)

else:
randomtime = random.randint(1, 3)
print('No changes!')
time.sleep(randomtime)

old_names_list = new_names_list
if __name__ == '__main__':
try:
main()

except KeyboardInterrupt:
print('Keyboard - Interrupted' )
sys.exit()

该程序现在的工作方式是检查 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)

我认为问题在于它运行了大量线程,因为它从名称.txt 中获取一个名称,并一一检查 randomnames.txt 中的所有名称(线程)名称。这意味着如果 randomnames.txt 中有 50 个名称,它将创建 50 个线程,检查 randomnames.txt 中的任何名称是否与 names.txt 中的名称匹配。如果匹配,则会打印出匹配项。问题是只需要创建 50 个具有一个名称的线程,这意味着它将添加另外 50 个线程来遵循新名称。

我认为这是一个问题以及如何解决它的原因是,如果可能将names.txt中的所有名称添加到列表中,然后将其发送到filter(),它会检查names.txt中是否有任何名称与来自 randomnames.txt 的名称

最佳答案

原帖中的代码过于复杂。从根本上讲,您正在比较两个名称集合是否匹配。这是集合论,您应该使用 Python 集合来执行此操作,而不是列表。考虑:

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

关于python - 将值保存到列表中并将其发送到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53771632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com