-->

Python的片第一个和最后一个列表元素(Python slice first and last e

2019-06-27 15:56发布

有没有办法在列表中只切了第一和最后一个项目?

例如; 如果这是我的名单:

>>> some_list
['1', 'B', '3', 'D', '5', 'F']

这样做(显然[0,-1]是无效的语法):

>>> first_item, last_item = some_list[0,-1]
>>> print first_item
'1'
>>> print last_item
'F'

有些事情我已经尝试:

In [3]: some_list[::-1]
Out[3]: ['F', '5', 'D', '3', 'B', '1']

In [4]: some_list[-1:1:-1]
Out[4]: ['F', '5', 'D', '3']

In [5]: some_list[0:-1:-1]
Out[5]: []
...

Answer 1:

单程:

some_list[::len(some_list)-1]

一个更好的方法(不使用切片,但是更容易阅读):

[some_list[0], some_list[-1]]


Answer 2:

只是想我会展示如何在numpy的的幻想索引做到这一点:

>>> import numpy
>>> some_list = ['1', 'B', '3', 'D', '5', 'F']
>>> numpy.array(some_list)[[0,-1]]
array(['1', 'F'], 
      dtype='|S1')

请注意,它也支持任意索引位置,其中[::len(some_list)-1]的方法将不工作:

>>> numpy.array(some_list)[[0,2,-1]]
array(['1', '3', 'F'], 
      dtype='|S1')

作为帝斯曼指出,你可以做类似的事情itemgetter :

>>> import operator
>>> operator.itemgetter(0, 2, -1)(some_list)
('1', '3', 'F')


Answer 3:

first, last = some_list[0], some_list[-1]


Answer 4:

你可以像下面这样做:

some_list[0::len(some_list)-1]


Answer 5:

有些人回答错误的问题,它似乎。 你说你想做的事:

>>> first_item, last_item = some_list[0,-1]
>>> print first_item
'1'
>>> print last_item
'F'

即,要提取每个第一和最后一个元素成独立的变量。

在这种情况下,由马修·亚当斯,pemistahl和katrielalex答案是有效的。 这仅仅是一个复合赋值:

first_item, last_item = some_list[0], some_list[-1]

但后来你说出一个复杂:“我分裂它在同一直线上,并且将不得不花费时间分裂两次:”

x, y = a.split("-")[0], a.split("-")[-1]

所以,为了避免两个分割()调用,您只能从一次分裂产生的列表进行操作。

在这种情况下,试图做太多的一条线是一个损害清晰和简单。 使用一个变量来保存拆分结果:

lst = a.split("-")
first_item, last_item = lst[0], lst[-1]

其他回应回答了这个问题:“如何获得新的列表,包括列表的第一个和最后一个元素的?” 它们很可能是你的标题,其中提到切片,你其实不想启发,根据你的问题的仔细阅读。

据我所知有3种方式来获得一个列表的第0个和最后一个元素的新列表:

>>> s = 'Python ver. 3.4'
>>> a = s.split()
>>> a
['Python', 'ver.', '3.4']

>>> [ a[0], a[-1] ]        # mentioned above
['Python', '3.4']

>>> a[::len(a)-1]          # also mentioned above
['Python', '3.4']

>>> [ a[e] for e in (0,-1) ] # list comprehension, nobody mentioned?
['Python', '3.4']

# Or, if you insist on doing it in one line:
>>> [ s.split()[e] for e in (0,-1) ]
['Python', '3.4']

列表解析方法的优点是,在元组中的索引集可以是任意的,程序生成。



Answer 6:

那这个呢?

>>> first_element, last_element = some_list[0], some_list[-1]


Answer 7:

Python 3中只回答(不使用切片或扔掉的剩余list ,但可能不够好反正)是使用拆包概括获得firstlast从中间分开:

first, *_, last = some_list

的选择_为包罗万象的自变量“休息”是任意的; 他们将被存储在名称_这是经常被用来作为一个替身“的东西,我不关心。”

不像许多其他的解决方案,这其中将确保有序列中的至少两种元素; 如果只有一个(所以firstlast是相同的),这将引发一个异常( ValueError )。



Answer 8:

其实,我只是想通了:

In [20]: some_list[::len(some_list) - 1]
Out[20]: ['1', 'F']


Answer 9:

更一般的情况:从列表的每一端返回N个点

答案为特定的第一和最后一个,但有些,像我这样的,可能是在寻找可以应用到其中,你可以从列表中的任意一侧返回前N个点更一般的情况下,解决方案的工作(说你有排序列表,只需要5个最高或最低),我想出了以下解决方案:

In [1]
def GetWings(inlist,winglen):
    if len(inlist)<=winglen*2:
        outlist=inlist
    else:
        outlist=list(inlist[:winglen])
        outlist.extend(list(inlist[-winglen:]))
    return outlist

并举例从清单1-10返回底部和顶部的3个数字:

In [2]
GetWings([1,2,3,4,5,6,7,8,9,10],3)

#Out[2]
#[1, 2, 3, 8, 9, 10]


Answer 10:

您可以使用类似

y[::max(1, len(y)-1)]

如果你真的想用切片。 这样做的好处是,它不能给索引错误,长度为1或0列出工作为好。



Answer 11:

这不是一个“切片”,但它是不使用索引明确一个通用的解决方案,以及适用于该情形,即问题的顺序是匿名的(所以你可以创建并在同一行“片”,而不创建两次,两次索引): operator.itemgetter

import operator

# Done once and reused
first_and_last = operator.itemgetter(0, -1)

...

first, last = first_and_last(some_list)

你可以只内嵌它(后from operator import itemgetter为简便起见,在使用时间):

first, last = itemgetter(0, -1)(some_list)

但是如果你会重用吸气很多,你可以节省重新创建工作(并给它一个有用的,自文档名称)通过创建一次的时间提前。

因此,对于您的具体使用情况,您可以取代:

x, y = a.split("-")[0], a.split("-")[-1]

有:

x, y = itemgetter(0, -1)(a.split("-"))

split一次,而不存储完整list中的永久名称len检查或双击索引等。

需要注意的是itemgetter多个项目返回一个tuple ,而不是一个list ,所以如果你不只是它拆包特定的名称,需要一个真正的list ,你必须包裹在呼叫list构造。



Answer 12:

另一个python3解决方案使用元组的“*”字符拆包:

first, *_, last = range(1, 10)


Answer 13:

这些都是有趣的,但如果你有一个版本号,你不知道从字符串中的任何一个部分的大小和要删除的最后一段。 像20.0.1.300和我想的东西用20.0.1落得没有300结尾。 我有这个至今:

str('20.0.1.300'.split('.')[:3])

它返回列表的形式为:

['20', '0', '1']

我怎么拿回来成句点分隔的一个字符串

20.0.1


Answer 14:

我发现这可能做到这一点:

list[[0,-1]]


Answer 15:

def recall(x): 
    num1 = x[-4:]
    num2 = x[::-1]
    num3 = num2[-4:]
    num4 = [num3, num1]
    return num4

现在,只要使函数外的变量和调用函数:是这样的:

avg = recall("idreesjaneqand") 
print(avg)


文章来源: Python slice first and last element in list