“python方式”解析并有条件地替换2dlis中的每个元素

2024-09-27 07:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,它由更多的字符串列表组成,这些字符串可以表示单词(在字母数字意义上)或int,例如

myLists = [['5','cat','23'], 
           ['33','parakeet','scalpel'], 
           ['correct','horse','battery','staple','99']]  

我想解析数组,以便将所有整数表示转换为int。我有一个简单的函数,numParser(string)用于此目的:

^{pr2}$

在我的c/java背景下,我通常只迭代两个数组,改变每个值(尽管这些数组是同构的)。但我对python还不熟悉,我觉得有更好的方法可以做到这一点,所以我四处搜索,找到了一些关于map()和list comprehension的so帖子。列表理解似乎不是正确的方法,因为列表不是统一的,但是map()似乎应该可以工作。为了测试,我做了

a=['cat','5','4']
a = map(numParser, a)

这很管用。不假思索,我在一个嵌套循环上做了同样的事情,但事实并非如此。在

for single_list in myLists:
    single_list = map(numParser, rawData)

现在,在接收到一个未更改的2D数组之后,我突然想到迭代器正在处理对数组的引用,而不是数组本身。是否有一种超级时髦的python方法来实现我将所有整数表示形式转换为整数的目标,还是需要直接访问每个数组值来更改它,例如myLists[1][2]=numParser(myLists[1][2])?在


Tags: 方法字符串map列表字母数字整数数组
3条回答

您可以使用列表理解来执行此操作:

>>> [map(numParser, li) for li in myLists]
[[5, 'cat', 23], [33, 'parakeet', 'scalpel'], ['correct', 'horse', 'battery', 'staple', 99]]

您可以使用嵌套列表理解并使用str.isdigit()方法检查字符串是否为数字,然后将其转换为int

>>> [[int(i) if i.isdigit() else i for i in j] for j in myLists]
[[5, 'cat', 23], [33, 'parakeet', 'scalpel'], ['correct', 'horse', 'battery', 'staple', 99]]

或者,如果您想使用您的函数,您可以将其传递给map函数或在列表理解中使用。在

以下是一种方法:

for single_list in myLists:
    for i, item in enumerate(single_list):
        single_list[i] = numParser(item)

这种方法的优点是您实际上替换了现有列表中的元素,而不是创建新的列表。在

相关问题 更多 >

    热门问题