【问题标题】:How to remove duplicate values generated randomly from list in python如何从python中的列表中删除随机生成的重复值
【发布时间】:2019-10-23 03:42:50
【问题描述】:

我有一个输入点列表:

input_points = [{'name': 'a', 'value': (0.0, 1.0)}, {'name': 'b', 'value': (2.0, 1.0)},
                {'name': 'c', 'value': (3.0, 1.0)}, {'name': 'd', 'value': (0.0, 3.0)},
                {'name': 'e', 'value': (1.0, 2.0)}, {'name': 'f', 'value': (1.5, 1.5)},
                {'name': 'g', 'value': (1.0, 1.0)}, {'name': 'h', 'value': (1.5, 2.0)}]

我必须迭代生成两个随机点。我使用 random.sample() 作为:

for x in range(100):
    point1 = random.sample(input_points, 2)
    print(point1)

但是它给了我一个重复点的组合,这就是为什么我没有在 100 次迭代中得到列表中所有点的组合。但我只需要遍历 100 次迭代中的所有点。有什么方法可以删除重复项,我可以在 100 次迭代中得到所有点的组合。

谢谢

【问题讨论】:

  • 对于 8 个点的列表,没有 100 个唯一的 2 点组合。同样使用random 并不是找到所有可能组合的最佳方式。这是学校评估吗?有什么限制?
  • 8 个点将有 28 个唯一组合,并且我有限制在 100 次迭代中从 8 个点中选择所有 2 个点的唯一组合。
  • 你必须使用random吗?这可以使用两个嵌套的 for 循环在 28 次迭代中轻松完成。
  • 实际上也有计算时间限制,我必须通过实现ransac算法来计算这些点的最佳线拟合。我不限于使用随机。你能告诉我如何使用嵌套循环来实现这个
  • 好吧,ransac 算法依赖于随机样本,所以我不确定迭代方法是否能帮助您完成这一点,但我会发布一个示例。

标签: python list random


【解决方案1】:

您可以找到所有迭代,使用嵌套循环进行迭代:

pairs = []
for i, point1 in enumerate(input_points):
    for point2 in input_points[i+1:]:
        pairs.append([point1, point2])

但是,Ransac 算法取决于随机样本以及它们与模型的拟合程度。

【讨论】:

    【解决方案2】:

    我们可以:

    1) 创建所有点组合。

    2) 对这些对进行随机抽样。

    import random
    from itertools import combinations
    
    input_points = [{'name': 'a', 'value': (0.0, 1.0)}, {'name': 'b', 'value': (2.0, 1.0)},
                    {'name': 'c', 'value': (3.0, 1.0)}, {'name': 'd', 'value': (0.0, 3.0)},
                    {'name': 'e', 'value': (1.0, 2.0)}, {'name': 'f', 'value': (1.5, 1.5)},
                    {'name': 'g', 'value': (1.0, 1.0)}, {'name': 'h', 'value': (1.5, 2.0)}]
    
    all_pairs = list(combinations(input_points, 2))
    
    y = random.sample(all_pairs, 10) # random sample of pairs 
                                     # (in this case 10 pairs)
                                     # max we could get is 28
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2019-01-21
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多