Json 像python列表一样更改外部数据

Json 像python列表一样更改外部数据,json,python-3.x,list,csv,Json,Python 3.x,List,Csv,我有一个问题,在我的脑海里似乎应该很简单,但我正在努力找出最简单的执行方法 基本上,我有两张名单: list1 = ['name1', 'name2', 'name3', 'name4', 'name5'] list2 = ['name6', 'name7', 'name8', 'name9', 'name10'] 我的最终目标是,当python脚本运行时,我将从每个列表中返回1个随机名称,但理想情况下,在接下来的4次运行中,脚本不会从任何一个列表中返回相同的名称。基本上,我希望每次运行的配对

我有一个问题,在我的脑海里似乎应该很简单,但我正在努力找出最简单的执行方法

基本上,我有两张名单:

list1 = ['name1', 'name2', 'name3', 'name4', 'name5']
list2 = ['name6', 'name7', 'name8', 'name9', 'name10']
我的最终目标是,当python脚本运行时,我将从每个列表中返回1个随机名称,但理想情况下,在接下来的4次运行中,脚本不会从任何一个列表中返回相同的名称。基本上,我希望每次运行的配对/选择是随机的,但我希望它每运行脚本5次就重新启动一次旋转

我想我需要将数据存储在外部。从概念上讲,我认为我需要脚本在每次运行时将一个名称从一个列表移动到另一个列表,当第一个列表为空时,它会反转名称并以另一种方式移动名称,以此类推

我应该使用
csv.DictReader
在两个csv文件之间移动名称吗?或者将它们存储在JSON中


如果这不合理,请原谅我。我正在努力把我的问题用文字表达出来。

为什么不把它存储在一个文本文件中呢

import random

list1 = ['name1', 'name2', 'name3', 'name4', 'name5']
list2 = ['name6', 'name7', 'name8', 'name9', 'name10']

used = open("old.txt").readlines()

l1_copy = list1[:]
l2_copy = list2[:]
for line in used:
    if line := line.strip():
        a, b = line.split(",")
        l1_copy.remove(a)
        l2_copy.remove(b)

if not l1_copy or not l2_copy:
    # clear file
    with open("old.txt", "w"): pass
else:
    list1 = l1_copy
    list2 = l2_copy

choice1, choice2 = random.choice(list1), random.choice(list2)

print("Choice 1:", choice1)
print("Choice 2:", choice2)

with open("old.txt", "a") as f:
    f.write(choice1 + "," + choice2 + "\n")
在当前目录中创建一个名为
old.txt
的文件。它将存储以前的运行,以逗号分隔

运行示例:

$ python3.8 choose_from_list.py 
Choice 1: name2
Choice 2: name9
$ python3.8 choose_from_list.py 
Choice 1: name5
Choice 2: name10
$ python3.8 choose_from_list.py 
Choice 1: name4
Choice 2: name6
$ python3.8 choose_from_list.py 
Choice 1: name1
Choice 2: name7
$ python3.8 choose_from_list.py 
Choice 1: name3
Choice 2: name8

谢谢你的帮助!你帮助我认识到,我不需要在外部存储这两个列表并对它们进行变异。我最终使用了你的想法,将旧的(用过的)名称存储在一个txt文件中。然后,我将其和原始列表转换为一个数组,并使用numpy的setdiff1d方法返回它们之间的唯一值。再次感谢你的帮助!