【问题标题】:Python: add item in multidimensional listPython:在多维列表中添加项目
【发布时间】:2021-05-30 08:00:55
【问题描述】:

嗨,我对 python 不是很了解。我想将数字插入到多维数组 (c) 中,数字之间的最大差异为 0.21%。但是,我想将彼此不同 0.21 的数字的其他相关数字放入同一个数组中。

nums = sorted([47255, 47343, 47865, 47904, 48000, 48001], reverse=True)

i = 0
b = 1

c = []

while i < len(nums):
    while b < len(nums) - i:
        a = ((nums[i] - nums[i+b]) / nums[i+b]) * 100
        if a < 0.21:
            if (nums[i] in x for x in c):
                c.append([])
                c[i].append(str(nums[i]))
                c[i].append(str(nums[i + b]))
            else:
                c.append(str(nums[i]))
                c.append(str(nums[i + b]))
                c.append([])
        b = b + 1
    b = 1
    i = i + 1
print(c)

结果:

[['48001', '48000', '48001', '47904'], ['48000', '47904'], ['47904', '47865'], [], ['47343', '47255']]

我想要什么

[['48001', '48000', '47904', '47865'], ['47343', '47255']]

(48001 48000 最大差异 %0.21 但 47865 之间的差异更大 %0.21 48001)但是 47865 .21 47904 .21 48000 而这也是最大 .21 48001 所有这些数字都必须在 c 数组的索引 1 中。

47343 不是最大差异 .21 47865 那么这也应该在第二个索引中。

47343 最大 %0.21 差异 47255

c = [['48001', '48000', '47904', '47865'], ['47343', '47255']]

img please look 对不起,我的英语不好。

【问题讨论】:

    标签: python list multidimensional-array find


    【解决方案1】:

    希望我的问题是正确的,我有一个解决方案。
    算法很简单——在矩阵中添加新元素时:

    • 测试每个现有数组的每个元素是否满足 (0.21%) 条件的新数字
      • 如果是,请将新数字添加到该数组中
      • 如果数字没有添加到任何数组中(没有现有数字满足条件),则创建一个仅包含新数字的新数组

    code00.py

    #!/usr/bin/env python
    
    import sys
    
    
    def add_to_array(n, arr2d, ratio=0.0021):
        for arr in arr2d:
            for elem in arr:
                if abs(n - elem) / max(n, elem) <= ratio:
                    arr.append(n)
                    return
        arr2d.append([n])
    
    
    def main(*argv):
        nums = sorted([47255, 47343, 47865, 47904, 48000, 48001], reverse=True)
        c = []
        for n in nums:
            add_to_array(n, c)
        print("The matrix:", c)
    
    
    if __name__ == "__main__":
        print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))
        rc = main(*sys.argv[1:])
        print("\nDone.")
        sys.exit(rc)
    

    输出

    [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q066411225]> "e:\Work\Dev\VEnvs\py_pc064_03.08.07_test0\Scripts\python.exe" code00.py
    Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit (AMD64)] 64bit on win32
    
    The matrix: [[48001, 48000, 47904, 47865], [47343, 47255]]
    
    Done.
    

    【讨论】:

    • 是的,谢谢。这对我来说太复杂了。我正在努力理解
    • 我认为你的版本更复杂。我还解释了算法。您始终可以打印中间值,以便了解算法内部发生的情况(例如,您可以添加 print(n, arr2d) 作为 add_to_array 的第一行)以查看它是如何填充的。跨度>
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多