Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种干净的方法可以对角连接数组?_Python - Fatal编程技术网

Python 有没有一种干净的方法可以对角连接数组?

Python 有没有一种干净的方法可以对角连接数组?,python,Python,我想简化一下数组的奇怪问题 我有一系列的清单,如: list1 = 'abc' list2 = 'def' ... listN = 'xyz' 我需要把它们拉在一起,就像: [['a', 0, 0, ..., 0], ['b', 0, 0, ..., 0], ['c', 0, 0, ..., 0], [0, 'd', 0, ..., 0], [0, 'e', 0, ..., 0], [0, 'f', 0, ..., 0], [...], [0, 0, 0, ..., 'x'],

我想简化一下数组的奇怪问题

我有一系列的清单,如:

list1 = 'abc'
list2 = 'def'
...
listN = 'xyz'
我需要把它们拉在一起,就像:

[['a', 0, 0, ..., 0],
 ['b', 0, 0, ..., 0],
 ['c', 0, 0, ..., 0],
 [0, 'd', 0, ..., 0],
 [0, 'e', 0, ..., 0],
 [0, 'f', 0, ..., 0],
 [...],
 [0, 0, 0, ..., 'x'],
 [0, 0, 0, ..., 'y'],
 [0, 0, 0, ..., 'z']]
我还有一个额外的限制条件,
numpy
不是一个选项

是否有一种简单的方法可以使用
itertools
?(它不需要是一个列表,因为以后会像
第行中的r:column中的c那样访问它:

现在我要做的是:

array1=[[0代表范围(n)中的i]代表范围(m)中的j]
步骤i=0
对于枚举中的i,a([listA,listB,…,listN]):
对于a中的b:
阵列1[步骤i][i]=b
步骤i+=1

但是它太难看了!

我认为唯一能让它看起来“不那么难看”的方法是用生成器替换临时数组,并去掉
步骤I

以下是我设法做到的:

def diag_zip(*列表):
对于i,枚举中的a(列表):
对于a中的el:
行=[0表示范围内的x(len(列表))]
行[i]=el
产量行
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印(列表(diag_zip('abc','def','ghi','xyz'))
它输出以下内容(由我设置格式):


我认为唯一能让它看起来“不那么难看”的方法是用生成器替换临时数组,并去掉
步骤I

以下是我设法做到的:

def diag_zip(*列表):
对于i,枚举中的a(列表):
对于a中的el:
行=[0表示范围内的x(len(列表))]
行[i]=el
产量行
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印(列表(diag_zip('abc','def','ghi','xyz'))
它输出以下内容(由我设置格式):

从pprint导入pprint
导入字符串
#生成['abc','def',…,]列表。
abc=字符串。ascii_小写
三=λl,i:f“{l[i-1]}{l[i]}{l[i+1]}”
如果i%3==0且i<24,则列出范围(len(abc))内i的三个(abc,i+1)
数据=[]
对于枚举中的i,o(列表):
curr=[0]*len(列表)
对于清单(o)中的obj:
curr[i]=obj
data.append(curr.copy())
pprint(数据)
或者,如果你想玩得开心,这里有一句话:

data=[(lambda l,ind,obj:l[:ind]+[obj]+l[ind+1:])([0]*len(列表),i,字母)表示列表中的i,o(列表)表示列表中的字母(o)]
下面是一个自封装代码,它在一行中完成所有操作(包括生成字符串+打印)(请不要使用它,这只是为了好玩):

print((lambda list:[(lambda l,ind,obj:l[:ind]+[obj]+l[ind+1:])([0]*len(list,i,letter)表示列表(o)中的字母在枚举(list)中的i,o)]([(lambda l,i:f“{l[i-1]}{l[i[i]}{l[i+1]}”)([abcdefghijjjjklmnopqrstuvwxyz i],i+1)表示范围内的i(len i)([abcdefghijjjjjjjjjjjjkqromnopqr==24%)和vwi
输出

[['a', 0, 0, 0, 0, 0, 0, 0],
 ['b', 0, 0, 0, 0, 0, 0, 0],
 ['c', 0, 0, 0, 0, 0, 0, 0],
 [0, 'd', 0, 0, 0, 0, 0, 0],
 [0, 'e', 0, 0, 0, 0, 0, 0],
 [0, 'f', 0, 0, 0, 0, 0, 0],
 [0, 0, 'g', 0, 0, 0, 0, 0],
 [0, 0, 'h', 0, 0, 0, 0, 0],
 [0, 0, 'i', 0, 0, 0, 0, 0],
 [0, 0, 0, 'j', 0, 0, 0, 0],
 [0, 0, 0, 'k', 0, 0, 0, 0],
 [0, 0, 0, 'l', 0, 0, 0, 0],
 [0, 0, 0, 0, 'm', 0, 0, 0],
 [0, 0, 0, 0, 'n', 0, 0, 0],
 [0, 0, 0, 0, 'o', 0, 0, 0],
 [0, 0, 0, 0, 0, 'p', 0, 0],
 [0, 0, 0, 0, 0, 'q', 0, 0],
 [0, 0, 0, 0, 0, 'r', 0, 0],
 [0, 0, 0, 0, 0, 0, 's', 0],
 [0, 0, 0, 0, 0, 0, 't', 0],
 [0, 0, 0, 0, 0, 0, 'u', 0],
 [0, 0, 0, 0, 0, 0, 0, 'v'],
 [0, 0, 0, 0, 0, 0, 0, 'w'],
 [0, 0, 0, 0, 0, 0, 0, 'x']]
从pprint导入pprint
导入字符串
#生成['abc','def',…,]列表。
abc=字符串。ascii_小写
三=λl,i:f“{l[i-1]}{l[i]}{l[i+1]}”
如果i%3==0且i<24,则列出范围(len(abc))内i的三个(abc,i+1)
数据=[]
对于枚举中的i,o(列表):
curr=[0]*len(列表)
对于清单(o)中的obj:
curr[i]=obj
data.append(curr.copy())
pprint(数据)
或者,如果你想玩得开心,这里有一句话:

data=[(lambda l,ind,obj:l[:ind]+[obj]+l[ind+1:])([0]*len(列表),i,字母)表示列表中的i,o(列表)表示列表中的字母(o)]
下面是一个自封装代码,它在一行中完成所有操作(包括生成字符串+打印)(请不要使用它,这只是为了好玩):

print((lambda list:[(lambda l,ind,obj:l[:ind]+[obj]+l[ind+1:])([0]*len(list,i,letter)表示列表(o)中的字母在枚举(list)中的i,o)]([(lambda l,i:f“{l[i-1]}{l[i[i]}{l[i+1]}”)([abcdefghijjjjklmnopqrstuvwxyz i],i+1)表示范围内的i(len i)([abcdefghijjjjjjjjjjjjkqromnopqr==24%)和vwi
输出

[['a', 0, 0, 0, 0, 0, 0, 0],
 ['b', 0, 0, 0, 0, 0, 0, 0],
 ['c', 0, 0, 0, 0, 0, 0, 0],
 [0, 'd', 0, 0, 0, 0, 0, 0],
 [0, 'e', 0, 0, 0, 0, 0, 0],
 [0, 'f', 0, 0, 0, 0, 0, 0],
 [0, 0, 'g', 0, 0, 0, 0, 0],
 [0, 0, 'h', 0, 0, 0, 0, 0],
 [0, 0, 'i', 0, 0, 0, 0, 0],
 [0, 0, 0, 'j', 0, 0, 0, 0],
 [0, 0, 0, 'k', 0, 0, 0, 0],
 [0, 0, 0, 'l', 0, 0, 0, 0],
 [0, 0, 0, 0, 'm', 0, 0, 0],
 [0, 0, 0, 0, 'n', 0, 0, 0],
 [0, 0, 0, 0, 'o', 0, 0, 0],
 [0, 0, 0, 0, 0, 'p', 0, 0],
 [0, 0, 0, 0, 0, 'q', 0, 0],
 [0, 0, 0, 0, 0, 'r', 0, 0],
 [0, 0, 0, 0, 0, 0, 's', 0],
 [0, 0, 0, 0, 0, 0, 't', 0],
 [0, 0, 0, 0, 0, 0, 'u', 0],
 [0, 0, 0, 0, 0, 0, 0, 'v'],
 [0, 0, 0, 0, 0, 0, 0, 'w'],
 [0, 0, 0, 0, 0, 0, 0, 'x']]

首先,我要将列表添加到一起,如下所示:

lists = [list_1, list_2, list3...]
现在可以执行嵌套数组:

output = []
for i in range(0, len(list)):
   for letter in list:
       #initialize array to be appended to output.
       temp = [0, 0, 0, 0, 0, 0, 0, 0]
       #replace index i with letter
       temp[i] = letter
       #add it to the output
       output.append(temp)



首先,我要将列表添加到一起,如下所示:

lists = [list_1, list_2, list3...]
现在可以执行嵌套数组:

output = []
for i in range(0, len(list)):
   for letter in list:
       #initialize array to be appended to output.
       temp = [0, 0, 0, 0, 0, 0, 0, 0]
       #replace index i with letter
       temp[i] = letter
       #add it to the output
       output.append(temp)



欢迎使用StAccess。如果你有工作代码,你想要更好的方式,考虑检查!为什么它超级丑陋?它是非常干净和简单的代码…IMO,任何你会试图使它“更漂亮”。这只会使它变得更复杂和不可读……您最好将它包装在一个函数中,并在需要的地方调用它……来自Python的Zen:“简单比复杂好。”您的代码看起来不错。看不出“改进”有什么好处它是丑陋的,因为我需要使用2个循环初始化一个潜在的巨大nd数组,然后在访问每个单独值的所有值上再次循环,而不是使用默认值连接组成部分以填补空白。这是非常低效的代码,在速度和内存方面没有更高的可读性。在numpy中,我会做一些重新设计ING使用ZooSyLoad函数。@ GrzegorzSkibinski“我有一个额外的约束:NUMPY不是一个选项。”欢迎来到StaskExcel。如果你有工作代码,你想要更好的方式,考虑一下签出!为什么它超级丑陋?它是非常干净和简单的代码…IMO,你要做的任何事情都让它更漂亮。这只会使它变得更复杂和不可读……您最好将它包装在一个函数中,并在需要的地方调用它……来自Python的Zen:“简单比复杂好。”您的代码看起来不错。看不出“改进”有什么好处它是丑陋的,因为我需要使用2个循环初始化一个潜在的巨大nd数组,然后在访问每个单独值的所有值上再次循环,而不是使用默认值连接组成部分以填补空白。这是非常低效的代码,在速度和内存方面没有更高的可读性。在numpy中,我会做一些重新设计“我有一个额外的限制,numpy不是一个选项。”你怎么看