【问题标题】:Altering external data like a python list更改外部数据,如 python 列表
【发布时间】:2020-05-01 14:35:02
【问题描述】:

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

基本上,我有 2 个姓名列表:

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

我的最终目标是,当运行 python 脚本时,我将从每个列表中返回 1 个随机名称,但理想情况下,脚本在接下来的 4 次运行中不会从任一列表中返回相同的名称。本质上,我希望每次运行的配对/选择是随机的,但我希望它每运行 5 次脚本就重新开始轮换。

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

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

如果这没有意义,请原谅我。我很难用语言表达我的问题。

【问题讨论】:

    标签: json python-3.x list csv


    【解决方案1】:

    为什么不直接将其存储在文本文件中?

    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 方法返回它们之间的唯一值。再次感谢您的帮助!
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2014-10-20
    • 2015-10-09
    • 2016-11-07
    • 2023-02-19
    • 2014-11-30
    相关资源
    最近更新 更多