【问题标题】:Randomize Consistently the elements of a list of list in python一致地随机化python中列表列表的元素
【发布时间】:2023-01-14 21:43:27
【问题描述】:

我有一个列表列表,我需要对数据进行全面洗牌,以便一个列的每个元素都被整个数组中的其他元素一致地替换。我的想法是我可以使用随机洗牌来做到这一点但我不太确定该怎么做。

这是例子:

这个想法是从这个列表列表

[['A','C'], ['A','D'], ['B','A'], ['F','B']]

在这个列表中,B 代替了 A,D 代替了 C,C 代替了 F,依此类推。

[['B','D'] ['B','A'], ['E','B'], ['C','E']]

预先感谢您的帮助

我尝试创建一个 for 循环,但我仍在努力。

【问题讨论】:

    标签: shuffle randomized-algorithm


    【解决方案1】:

    您可以使用 Python 中的 random.shuffle() 函数来随机排列每个子列表中的元素。但是,这只会打乱每个子列表中的元素,而不是跨子列表。

    要在所有子列表中一致地随机排列元素,您可以结合使用 random.shuffle() 函数和原始元素到新元素的映射。这是您可以做到的一种方法:

    import random
    
    # Initial list of lists
    list_of_lists = [['A','C'], ['A','D'], ['B','A'], ['F','B']]
    
    # Create a list of all unique elements in the initial list of lists
    elements = list(set([elem for sublist in list_of_lists for elem in sublist]))
    
    # Shuffle the elements
    random.shuffle(elements)
    
    # Create a mapping of original elements to new elements
    mapping = {elem: new_elem for elem, new_elem in zip(elements, elements[1:] + [elements[0]])}
    
    # Replace the elements in the initial list of lists with their new values using the mapping
    shuffled_list_of_lists = [[mapping[elem] for elem in sublist] for sublist in list_of_lists]
    
    print(shuffled_list_of_lists)
    

    这将例如输出:

    [['B','D'], ['B','A'], ['E','B'], ['C','E']]
    

    这段代码在原始元素和新元素之间创建了一个映射,然后使用嵌套列表理解根据映射用新值替换列表初始列表中的元素。

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2017-11-10
      • 2021-02-19
      • 2023-03-29
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多