gpt4 book ai didi

python - 将列表值分配给另一个列表

转载 作者:行者123 更新时间:2023-12-04 10:27:07 25 4
gpt4 key购买 nike

我有两个相同长度的列表,一个包含整数,一个包含浮点数。我想将每个浮点数分配给一个整数 - 相对 .

作者 相对 , 我是说:

  • 更高 整数应该有 更高的机会接收 浮点数
  • 整数应该有 较低的机会接收 浮点数

  • 对于分配,将浮点数附加到结果数组就足够了,因此 integers[index]匹配分配的 result[index] .

    既然我说的是 机会 ,我不能简单地排序一个列表降序和一个列表升序并匹配它们。

    我不太确定如何解决我的问题。我正在寻找一些我没有听说过的功能/模块 - 或者一如既往的首选:纯 python 内置解决方案:)
    #INDICES:   0    1    2    3    4    5    6    7    8    9  

    integers = [5, 5, 2, 4, 3, 1, 4, 5, 2, 3 ]
    floats = [0.1, 0.2, 0.3, 0.3, 0.3, 0.7, 0.6, 0.8, 0.5, 0.5]


    #possible result (could be different):
    result = [0.2, 0.3, 0.3, 0.5, 0.7, 0.8, 0.6, 0.1, 0.3, 0.5]

    #the result values are assigned to the integers at the same index

    如您所见,在结果示例中, result[9]==0.5分配给 integers[9]==3 , 而 result[6]==0.6分配给 integers[6]==4 .这是列表其余部分的一个异常(exception),因为通常较高的浮点数分配给较低的整数。

    最佳答案

    像这样的东西应该可以解决问题:

    import random

    def shuffle(ints, floats):

    new_ints = list(sorted(ints))
    new_floats = list(sorted(floats))

    def weight(x, n):
    # implement your own weight system here
    # maybe `n+x` - just make sure that as
    # x increases the weight increases
    return x

    def gen_weights(n):
    return [weight(x,n) for x in range(1,n+1)]

    result = []
    while new_ints:
    i = random.choices(range(len(new_ints)), gen_weights(len(new_ints)))[0]
    result.append((new_ints.pop(0), new_floats.pop(i)))

    new_result = []
    for x in ints:
    for i, (j, f) in enumerate(result):
    if j == x:
    new_result.append(f)
    del result[i]
    break
    return new_result

    random.seed(1)

    in1 = [5, 5, 2, 4, 3, 1, 4, 5, 2, 3 ]
    in2 = [0.1, 0.2, 0.3, 0.3, 0.3, 0.7, 0.6, 0.8, 0.5, 0.5]

    result = shuffle(in1, in2)
    print(result)

    输出:
    [0.3, 0.1, 0.8, 0.5, 0.3, 0.3, 0.7, 0.2, 0.6, 0.5]

    本质上,它制作了两个列表的排序副本,然后为每个浮点数创建一组权重,以确定它们被选中的可能性。它从浮点数集中删除该索引,并选择整数集的第一个值,并将其存储在结果列表中,从整数和浮点数集中删除项目。

    最后,函数遍历原始 ints 列表中的每一项,并在结果列表中找到对应的整数值。它删除该值,并将其附加到输出 ( new_result) 列表中。

    如果您不喜欢线性权重系统,请替换 return x weight 中的值与任何其他 一起使用增加功能。确保 x 的值更高有更高的返回值。

    希望这可以帮助 :)

    关于python - 将列表值分配给另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588426/

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