在某些数组位置查找重复的数字

Posted

技术标签:

【中文标题】在某些数组位置查找重复的数字【英文标题】:Find repeated numbers in certain array positions 【发布时间】:2020-10-04 19:48:23 【问题描述】:

我正在尝试根据取自另一个数组的位置在多维数组中查找重复值。上图正是我想要做的。

对于每个位置(或需要的行)从“位置数组”检查“数字数组”中是否存在与第一个匹配的重复数字一个

上图的例子应该返回(打印)类似:

重复次数:3,计数:3,行:0,0,0 重复次数:3,计数:3,行:0,1,2

并且应该忽略其他所有内容。

尝试了一千种不同的循环,但我失败了。

编辑:下面是一个无效的示例

print(finalValues)
for symbol in finalValues[0]:
    count = 0
    for line in lines:
        for i in range(0, len(line)):
            if finalValues[i][line[i]] == symbol:
                count += 1
        if count > 2:
            print("Repeated number: , count: , line: ".format(symbol, count, line))

编辑:数字示例(取自上图)

- We are looping through positions, and in the first loop we have positions: 1,1,1
- We should check numbers[0][1], numbers[1][1], numbers[2][1]
- In the next loop we have positions: 0,0,0
- We should check numbers[0][0], numbers[1][0], numbers[2][0]
- In the next loop we have positions: 2,2,2
- We should check numbers[0][2], numbers[1][2], numbers[2][2]
- In the next loop we have positions: 0,1,2
- We should check numbers[0][0], numbers[1][1], numbers[2][2]

【问题讨论】:

@usr2564301 添加了一个无效的示例,谢谢 位置数组数字数组的映射是怎么做的? @Anwarvic 位置是预定义的(硬编码),数字是在循环中随机生成的。它们是两个不同的数组,它们之间没有映射关系。 我尝试运行你的代码并得到NameError: name 'finalValues' is not defined。请提供minimal reproducible example。 @Kevin ,finalValues 数组是图片上的绿色数字数组。只是命名不同。 【参考方案1】:

我们可以使用内置的zip 函数并行循环numbers 行和对应的lines 行中的项目。下面的代码打印lines 中每一行选择的值,以确保我们得到了我们真正想要的项目。

一旦我们有了选择,我们使用head, *tail = selected将第一个项目放入head,将剩余的项目放入一个名为tail的列表中,这样我们就可以计算连续重复的次数。

代码

lines = [
    [1,1,1],
    [0,0,0],
    [2,2,2],
    [0,1,2],
    [2,1,0],
]

def test(numbers):
    for row in lines:
        selected = [num[val] for num, val in zip(numbers, row)]
        print(row, '->', selected)
        head, *tail = selected
        count = 1
        for val in tail:
            if val == head:
                count += 1
            else:
                break
        if count > 2:
            print("Repeated number: , count: , line: ".format(head, count, row))        

# Some test data
print("Testing...")
numbers = [[3, 4, 1], [3, 3, 5], [3, 7, 3]]
print('numbers', numbers)
test(numbers)    

print("Some more tests...")

# Some more test data
nums = [
    [[2, 2, 2], [4, 2, 2], [4, 2, 7]], 
    [[1, 3, 3], [5, 4, 3], [3, 4, 2]],
    [[7, 1, 6], [2, 1, 1], [1, 1, 5]], 
]

for numbers in nums:
    print('\nnumbers', numbers)
    test(numbers)    

输出

Testing...
numbers [[3, 4, 1], [3, 3, 5], [3, 7, 3]]
[1, 1, 1] -> [4, 3, 7]
[0, 0, 0] -> [3, 3, 3]
Repeated number: 3, count: 3, line: [0, 0, 0]
[2, 2, 2] -> [1, 5, 3]
[0, 1, 2] -> [3, 3, 3]
Repeated number: 3, count: 3, line: [0, 1, 2]
[2, 1, 0] -> [1, 3, 3]
Some more tests...

numbers [[2, 2, 2], [4, 2, 2], [4, 2, 7]]
[1, 1, 1] -> [2, 2, 2]
Repeated number: 2, count: 3, line: [1, 1, 1]
[0, 0, 0] -> [2, 4, 4]
[2, 2, 2] -> [2, 2, 7]
[0, 1, 2] -> [2, 2, 7]
[2, 1, 0] -> [2, 2, 4]

numbers [[1, 3, 3], [5, 4, 3], [3, 4, 2]]
[1, 1, 1] -> [3, 4, 4]
[0, 0, 0] -> [1, 5, 3]
[2, 2, 2] -> [3, 3, 2]
[0, 1, 2] -> [1, 4, 2]
[2, 1, 0] -> [3, 4, 3]

numbers [[7, 1, 6], [2, 1, 1], [1, 1, 5]]
[1, 1, 1] -> [1, 1, 1]
Repeated number: 1, count: 3, line: [1, 1, 1]
[0, 0, 0] -> [7, 2, 1]
[2, 2, 2] -> [6, 1, 5]
[0, 1, 2] -> [7, 1, 5]
[2, 1, 0] -> [6, 1, 1]

【讨论】:

这正是我所需要的!

以上是关于在某些数组位置查找重复的数字的主要内容,如果未能解决你的问题,请参考以下文章

查找数组中重复的数字

查找数组中的重复数字(剑指office)

数组中重复的数字

数组中重复的数字 --剑指offer

3. 数组中重复的数字[java]

剑指Offer03. 数组中重复的数字(哈希)