【发布时间】:2018-11-21 19:38:08
【问题描述】:
假设你有一个像这样的list of tuples:
list_of_tuples =
[('11','12','13'),('21','22','23'),('31','32','33'),('41','42','43')]
现在我想对这个列表或元组进行切片,这样我就有(一个新的)列表,每个元组只有前两个条目。所以,我想得到这个:
new_list = [('11','12'),('21','22'),('31','32'),('41','42')]
我的第一次尝试是像new_list = list_of_tuples[:][0:2] 这样的语法。第一个括号 [:] 索引整个列表,[:2] 获取每个元组的元素 0 和 1。然而,这总是返回前两个元组,包含所有三个原始条目。 (所以,我得到了[('11','12','13'),('21','22','23')])。
为什么它不能像这样工作,这里的潜在 Python 行为是什么?我也注意到了,[:][:][:]我怎么写都没关系。
获得我想要的结果的一种方法是编写一个类似 new_list = [(t[0], t[1]) for t in list_of_tuples] 的列表理解,但这需要更多的代码,而且我认为我的原始方法也是 pythonic。
【问题讨论】:
-
lst[:]对列表进行切片,但没有指定任何索引,实际上您只是在制作列表的副本——所以list_of_tuples[:][0:2]类似于list_of_tuples[:2]——它应该清楚为什么 this 不能按预期工作。 -
[:]返回整个列表,您从中切出前 2 个项目 -
print [(a[0],a[1]) for a in list] 试试这个
标签: python indexing tuples list-comprehension slice