Python:itemgetter()中的不一致性

2024-06-02 08:38:58 发布

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

我的代码中有一个奇怪的bug,可以追溯到itemgetter的以下行为:

>>> from operator import itemgetter
>>> l = ['abc', 'def', 'ghi']
>>> index_list_1 = [0]
>>> index_list_2 = [0, 1]
>>> list(itemgetter(*index_list_1)(l))
['a', 'b', 'c']
>>> list(itemgetter(*index_list_2)(l))
['abc', 'def']

我希望index_list_1的输出是['abc'],但是如果itemgetter只有一个要提取的项,它将返回元素而不是一个元组。你知道吗

我是不是用错了itemgetter?你知道吗

如果只提取一个值,如何确保得到一个单例列表?你知道吗


Tags: 代码fromimport元素列表indexdefoperator
2条回答

一切看起来都很好:itemgetter(*[0])(['abc'])返回abc,您正在从中构建一个listlist('abc')将其输入转换为list并返回['a', 'b' 'c']。你知道吗

解决问题的一个愚蠢方法是:

list(itemgetter(*l+[l[-1]])(m))[:-1]

。。。或者

list(itemgetter(*l)(m)) if len(l) > 1 else [m[l[0]]]

其中l是用于提取值的索引列表m是值列表。你知道吗

如果l是空列表,这就不起作用,但是itemgetter也不能处理这种情况,尽管一致的行为是返回()。你知道吗

itemgetter的行为非常不幸。你知道吗

在这种情况下,最好的选择可能是

[m[i] for i in l]

相关问题 更多 >