gpt4 book ai didi

python - 在 python 中使用 2D 列表的优雅方式

转载 作者:行者123 更新时间:2023-11-28 22:23:18 27 4
gpt4 key购买 nike

我刚开始使用 Python 2.7 几个月。我通常在 Python 中使用一些二维列表,这是一个简单的任务,但我想知道是否有更优雅的方法来完成我在 Python 2.7 中的相同工作?

这是我的任务。我有一个二维列表:

my_list = [["__cat_1", "__cat_2"],
["__cat_3", "__cat_4"]]

我想将上面的二维字符串列表转换为二维整数列表。

expected_result = [[1, 2], [3, 4]]

像往常一样,我按以下方式做:

def convert_2D_string_list(my_list):
for a_group in my_list:
yield [int(k.replace("__cat_","")) for k in a_group]

但是当我的输入有 3 个维度时,上面的方法不起作用:

my_second_list = [[["__cat_1", "__cat_2"], "__cat_12"],
[["__cat_3", "__cat_4"], "__cat_34"]]

如果我的输入列表是 integer,我知道转换它的优雅方式。例如:

def convert_2D_int_list:
my_list = [[1, 2], [3, 4]]
import numpy as np
# Assume that, I want to add 1 for each of element

# Convert to numpy array
my_list = np.asarray(my_list)
my_list += 1

# my_list = [[2, 3], [4, 5]]
return my_list

我的 convert_2D_string_list 方法的最佳实践是什么?所以如果它不是 2D 列表,而是 3D 列表 -> 我不会担心维数。

如有任何建议,我们将不胜感激。谢谢。

最佳答案

Numpy 数组与 NUMbers 一起工作得很好,它与字符串一起使用有点棘手。 np.vectorize是解决这种情况的方法,即使没有性能改进。但它管理任意数量的维度,希望你会发现它很优雅。

a=np.array([[[['__cat_0', '__cat_1'],
['__cat_2', '__cat_3']],

[['__cat_4', '__cat_5'],
['__cat_6', '__cat_7']]],


[[['__cat_8', '__cat_9'],
['__cat_10', '__cat_11']],

[['__cat_12', '__cat_13'],
['__cat_14', '__cat_15']]]])


def f(str): return int(str[6:])
fv=np.vectorize(f)

print(fv(a))

给出:

[[[[ 0  1]
[ 2 3]]

[[ 4 5]
[ 6 7]]]


[[[ 8 9]
[10 11]]

[[12 13]
[14 15]]]]

备注:anp.vectorize(lambda n : '__cat_'+str(n))(np.arange(16).reshape((2,)*4) ) ;)

关于python - 在 python 中使用 2D 列表的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com