在某些数组位置查找重复的数字
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]
【讨论】:
这正是我所需要的!以上是关于在某些数组位置查找重复的数字的主要内容,如果未能解决你的问题,请参考以下文章