我有一个像下面这样的列表,其中第一个元素是id,另一个是字符串:
[(1, u'abc'), (2, u'def')]
我只想从下面的元组列表中创建一个id列表:
[1,2]
我将在__in中使用这个列表,因此它需要是一个整数值列表。
我有一个像下面这样的列表,其中第一个元素是id,另一个是字符串:
[(1, u'abc'), (2, u'def')]
我只想从下面的元组列表中创建一个id列表:
[1,2]
我将在__in中使用这个列表,因此它需要是一个整数值列表。
当前回答
要获取列表或元组的元素,可以遍历列表或元组
a = [(1, u'abc'), (2, u'def')]
list1 = [a[i][0] for i in range(len(a))]
print(list1)
其他回答
当我运行时(如上所述):
>>> a = [(1, u'abc'), (2, u'def')]
>>> import operator
>>> b = map(operator.itemgetter(0), a)
>>> b
而不是返回:
[1, 2]
我收到了这样的回报:
<map at 0xb387eb8>
我发现我必须使用list():
>>> b = list(map(operator.itemgetter(0), a))
使用此建议成功返回一个列表。也就是说,我对这个解决方案很满意,谢谢。(使用Spyder、iPython控制台、Python v3.6测试/运行)
如果你需要转换为一个嵌套的列表,答案将是:
a = [(1, u'abc'), (2, u'def')]
print([list(i[0]) for i in a])
输出:
[[1], [2]]
我更喜欢这样拉:
>>> lst = [(1, u'abc'), (2, u'def')]
>>> new, _ = zip(*lst)
>>> new
(1, 2)
>>>
或者如果你不知道有多少额外的值
>>> new, *_ = zip(*lst)
>>> new
(1, 2)
>>>
另一个简单的建议是,如果你需要转换为一个嵌套的元组,并且列表中的所有元素的答案将是:
s=[]
for i in range(len(a)):
s.append(a[i][0])
print(s)
输出:
[(1),(2)]
这就是什么算子。Itemgetter是for。
>>> a = [(1, u'abc'), (2, u'def')]
>>> import operator
>>> b = map(operator.itemgetter(0), a)
>>> b
[1, 2]
itemgetter语句返回一个函数,该函数返回您指定的索引处的元素。这和写作完全一样
>>> b = map(lambda x: x[0], a)
但我发现itemgetter更清晰、更明确。
这对于创建紧凑排序语句很方便。例如,
>>> c = sorted(a, key=operator.itemgetter(0), reverse=True)
>>> c
[(2, u'def'), (1, u'abc')]