[英]Function for DataFrame operation using variables in the list with Python
[英]Perform operation on python list without using global variables
我有一個python列表(例如lst = [2, 3, 5]
)。 對應於lst
每個元素,我想以以下方式構造一個numpy矩陣:它應該是一個與lst
所考慮的元素大小相同的正方形數組,並且應該用該元素的平方值填充。
這就是我目前正在解決的問題:
import numpy as np
lst = [2,3,5]
for i in range(len(lst)):
globals()['mat'+str(lst[i])] = np.full( (lst[i],lst[i]), lst[i]**2 )
print globals()['mat'+str(2)]
print " "
print globals()['mat'+str(3)]
print " "
print globals()['mat'+str(5)]
[[4 4]
[4 4]]
[[9 9 9]
[9 9 9]
[9 9 9]]
[[25 25 25 25 25]
[25 25 25 25 25]
[25 25 25 25 25]
[25 25 25 25 25]
[25 25 25 25 25]]
在不使用全局變量的情況下執行此任務的有效方法是什么?
無論您如何命名或生成陣列,這里都沒有效率問題。 無論命名如何,每個數組都必須使用np.full
。 創建數組后,可以將其收集在列表,字典中或將其分配給變量。
我將在列表中收集數組:
In [212]: lst = [2,3,5]
In [213]: lst1 = [np.full((i,i),i**2) for i in lst]
In [214]: lst1
Out[214]:
[array([[4, 4],
[4, 4]]), array([[9, 9, 9],
[9, 9, 9],
[9, 9, 9]]), array([[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25]])]
如果必須分配名稱,請使用類似以下內容的名稱:
In [215]: mat2, mat3, mat5 = lst1
In [216]: mat3
Out[216]:
array([[9, 9, 9],
[9, 9, 9],
[9, 9, 9]])
可以使用globals()[]
技巧,但不是良好的Python編程實踐。 它看起來更像是BASIC領域的產物,而不是慣用的Python。 將內容收集在列表和詞典中,而不是動態生成的全局變量中。
說到字典,我們可以使用以下方法將列表轉換為一個:
In [217]: adict = {f'mat{i}': x for i,x in zip(lst, lst1)}
In [218]: adict
Out[218]:
{'mat2': array([[4, 4],
[4, 4]]), 'mat3': array([[9, 9, 9],
[9, 9, 9],
[9, 9, 9]]), 'mat5': array([[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25],
[25, 25, 25, 25, 25]])}
(在這里,我使用的是最新的f-literal
字符串語法。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.