我有一个清单:
nums=[[19],[5],[23],[6],[10]].
有没有办法将列表对象转换为“简单”对象?
那么[19]
会变成实际的整数19
吗?也许某种类型的铸造?
答案 0 :(得分:5)
这可能是最明确的方法:
nums = [[19],[5],[23],[6],[10]]
ints = [i[0] for i in nums]
还有其他有益的方法可以做到。
从项目中解压缩工作(这表明每个项目中只有一个元素,如果有多个元素,则会给出解包错误):
unpacked_ints = [i for i, in nums]
或者可以从每个子列表中弹出(最后一个项目,将其从子列表中删除,如果您保留对子列表的引用,它将不再存在):
popped_ints = [i.pop() for i in nums]
或在功能上(operator.itemgetter
返回部分函数,如lambda x: x[0]
):
import operator
ints2 = list(map(operator.itemgetter(0), nums))
在Python2中,不需要列表来实现:
import operator
ints3 = map(operator.itemgetter(0), nums)
编辑回应评论:
现在你的评论是你正在处理一个很大的迭代,可能不想在内存中实现整个事情。这仍然不会改变我建议你处理它的方式。我感觉你能够做到这一点:
for i in nums:
my_process(i)
所以我建议你这样做:
for i in nums:
my_process(i[0])
答案 1 :(得分:4)
另一种选择是压扁列表。
nums = [[19],[5],[23],[6],[10]]
nums = [num for numlist in nums for num in numlist]
或者,但只有当你想要激怒任何阅读你代码的人时:
n = [[19],[5],[23],[6],[10]]
n = [n for n in n for n in n]
)
答案 2 :(得分:1)
最简单的解决方案是stdlib:https://docs.python.org/2/library/itertools.html#itertools.chain.from_iterable
import itertools
nums=[[19],[5],[23],[6],[10]]
print list(itertools.chain.from_iterable(nums))
# [19, 5, 23, 6, 10]