我试图遍历NumPy数组来创建列表列表,但是使用的for循环是按字母顺序而不是按出现的顺序附加到列表列表。你知道吗
以下是我的NumPy数组的一部分,我可以用它作为示例:
tarifas = np.array([['Afganistán', '577.21', '0.9360168799091559', '1.01745744495737'],
['Albania', '5450.0', '1.1439867079655244', '0.9195410037811979'],
['Alemania', '49690', '1.0034542200895549', '0.9873874704432137'],
['Angola', '3670.0', '0.931103978746121', '1.162652536895962'],
['Antigua y Barbuda', '18170', '0.7795684991736309', '0.6399312443495023'],
['Arabia Saudita', '23490', '1.0573676413333202', '0.7477763277701148'],
['Argelia', '4650.0', '0.7969840140783656', '0.5123046862189027'],
['Argentina', '9050.0', '1.3647162509775996', '0.48274125735042017'],
['Armenia', '4450.0', '1.4545784506262867', '1.430465487479917'],
['Australia', '57200', '0.7293018985322222', '1.1744384938116095'],
['Austria', '52470', '1.2396562976033307', '0.8630735107719588'],
['Azerbaiyán', '4780.0', '0.9111186496911305','0.534268284966654']])
我想创建一个列表列表,使用另一个列表进行迭代,其中包含我需要在数组中找到的国家的特定名称,即
list_countries = ["Angola", "Austria", "Argentina", "Albania", "Armenia"]
请注意列表不是按字母顺序排列的,因此列表列表应该遵循这个顺序。迭代后的输出应如下所示:
new_list_of_countries = [['Angola' '3670.0' '0.931103978746121' '1.162652536895962'],
['Austria' '52470' '1.2396562976033307' '0.8630735107719588'],
['Argentina' '9050.0' '1.3647162509775996' '0.48274125735042017'],
['Albania' '5450.0' '1.1439867079655244' '0.9195410037811979'],
['Armenia' '4450.0' '1.4545784506262867' '1.430465487479917']]
以下是我使用的代码:
tarifas_paises_escogidos = []
for i in tarifas:
for v in list_countries:
if str(v) in str(i):
tarifas_paises_escogidos.append(i)
print(np.array(tarifas_paises_escogidos))
将列表理解与
sorted
结合使用:输出:
一个不使用列表理解:
产生过滤但未排序的:
然后进行排序(并重新分配!)地址:
这使得上述输出。你知道吗
洞察:
在上面的
lambda
中,x
几乎毫无意义。它只意味着输入lambda
得到的内容被定义为x
,并用于索引(即x[0]
)。你知道吗等同于:
然后用在
sorted
:但是你可能经常发现仅仅为一个用例定义一个函数是非常低效的。这时
lambda
就开始了:)。你知道吗由于原始NumPy数组} 来获取与
tarifas
是按字母顺序排序的,因此可以使用^{list_countries
对应的索引:然后使用花式索引(使用数组索引数组)获得所需结果:
对于大型数组,这种矢量化方法应该比使用Python的For循环的解决方案快得多。你知道吗
相关问题 更多 >
编程相关推荐