我的代码中有一个奇怪的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?
如果只提取一个值,我如何确保我得到一个单例列表?
发布于 2019-10-23 15:17:32
一切看起来都很好:itemgetter(*[0])(['abc'])返回abc,您可以从中构建一个list。list('abc')将其输入转换为list并返回['a', 'b' 'c']。
发布于 2019-10-23 15:17:02
解决这个问题的一个愚蠢的方法是:
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]https://stackoverflow.com/questions/58517190
复制相似问题