首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: itemgetter()中的不一致

Python: itemgetter()中的不一致
EN

Stack Overflow用户
提问于 2019-10-23 15:03:27
回答 2查看 65关注 0票数 0

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

代码语言:javascript
复制
>>> 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

如果只提取一个值,我如何确保我得到一个单例列表?

EN

回答 2

Stack Overflow用户

发布于 2019-10-23 15:17:32

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

票数 0
EN

Stack Overflow用户

发布于 2019-10-23 15:17:02

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

代码语言:javascript
复制
list(itemgetter(*l+[l[-1]])(m))[:-1]

..。或

代码语言:javascript
复制
list(itemgetter(*l)(m)) if len(l) > 1 else [m[l[0]]]

其中,l是为m提取值的指标列表,是值列表。

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

itemgetter的行为是非常不幸的。

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

代码语言:javascript
复制
[m[i] for i in l]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58517190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档