python - 如何使用Python定义二维数组划分的节号?

标签 python arrays python-3.x multidimensional-array sections

我有这个数据结构:

enter image description here

它是分为 3 部分的二维数组。对于数组中的每个字母,我需要定义部分编号。例如,字母a,b,c,d位于第1节中; e,f,g,h 位于第 2 部分

<小时/>

我的代码。首先,这个二维数组准备工作:

from itertools import cycle
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

#2d-array initialization  
width, height = 3, 6 
repRange = cycle(range(1, 3))
values = [0] * (width - 1)
array2d = [[next(repRange)] + values for y in range(height)]

#Filling array with letters:
m = 0
for i in range(height):
    for j in range(1,width):
       array2d[i][j] = letters[m] 
       m+=1

#Printing:      
for row in array2d:
    print(row)

输出:

[1, 'a', 'b']
[2, 'c', 'd']
[1, 'e', 'f']
[2, 'g', 'h']
[1, 'i', 'j']
[2, 'k', 'l']
<小时/>

现在我需要确定每个字母的节号并将其与字母本身一起保存。我使用 defineSection 函数并将值保存在字典中:

def defineSection(i, division, height):
    if i <= division:
        return 1
    elif division*2 >= i > division :
        return 2
    elif division*3 >= i > division*2 :
        return 3   

dic = {}
for i in range(height):
    for j in range(1,width):
        section = defineSection(i+1, 2, height)
        dic.update({array2d[i][j] : section})

for item in dic.items():
    print(item)

输出:

('f', 2)
('b', 1)
('c', 1)
('e', 2)
('k', 3)
('g', 2)
('d', 1)
('a', 1)
('l', 3)
('h', 2)
('i', 3)
('j', 3)

它正确定义了每个字母的所有部分编号。但是 defineSection 方法是原始方法,如果行数大于 6,则该方法将不起作用。 我不知道如何实现 defineSection 方法,以便它自动定义节号,仅考虑当前的行号分区总共行数

<小时/>

问题:是否有某种方法可以简单地确定节号,而无需那么多 if-elif 条件,并且与总行数无关?

最佳答案

您可以极大地简化矩阵创建代码。您所需要的只是一个 letters 迭代器,它会返回自身,以便您可以使用 zip 一次迭代 2 个字母。

In [3]: from itertools import cycle

In [4]: letters = "abcdefghijkl"

In [5]: ranges = cycle(range(1,3))

In [6]: iter_letters = iter(letters)

In [7]: matrix = [[i,a,b] for i,a,b in zip(ranges,iter_letters,iter_letters)]

In [8]: matrix
Out[8]: 
[[1, 'a', 'b'],
 [2, 'c', 'd'],
 [1, 'e', 'f'],
 [2, 'g', 'h'],
 [1, 'i', 'j'],
 [2, 'k', 'l']]

至于分配部分,请注意,每两行一个部分,即四个个字母,因此您可以使用简单的楼层划分来“跳过”计数。

In [9]: sections = {letter:(i//4 + 1) for i,letter in enumerate(letters)}

In [10]: sections
Out[10]: 
{'a': 1,
 'b': 1,
 'c': 1,
 'd': 1,
 'e': 2,
 'f': 2,
 'g': 2,
 'h': 2,
 'i': 3,
 'j': 3,
 'k': 3,
 'l': 3}

关于python - 如何使用Python定义二维数组划分的节号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232765/

相关文章:

php - 合并没有相同值的数组

C++ 静态初始化 map<float, float[3]>

python - 在python中加入xml element.text

python-3.x - 将 Scapy L3socket 与 WSL 结合使用时,协议(protocol)不支持地址族

Python 四舍五入到最接近的 0.25

java - 使用 jcombobox 返回对象或变量

Python imap 库

python - PyQt QThreadPool运行函数如何传递参数

python - 在 Python 中建立 HTTPS 连接时出现 HTTP 400 错误请求?

python - IntegrityError 中的 Sqlalchemy session.rollback 导致队列池用完处理程序?