python基础二之列表和元组(索引和切片)

版权声明:总想写点东西,打算把以前看的东西在重新看一遍 https://blog.csdn.net/qq_36581957/article/details/83868058

在python中,有几种重要的操作可以适用于所有的序列,其中包括索引、切片、相加、相乘和成员资格检查,另外Python中提供了一些内置函数,包含序列的长度,序列中最大值、最小值等。

     1、索引:序列中的所有元素都有索引,且从0开始递增。我们可以通过索引的方式获取元素,这种方式适应于所有的序列,当使用负索引时,Python将从最后一个元素开始往左数,因此(-1)是最后一个元素的位置。

#定义一个列表month
month=["january","february","match","aprill","may","june","july","august","september","october","november","december"]
#正向获取元素
one=month[0]
two=month[1]
three=month[2]
four=month[3]
print("one:{}".format(one))
print("two:{}".format(two))
print("three:{}".format(three))
print("four:{}".format(four))
#负向获取元素
one_negative=month[-1]
two_negative=month[-2]
three_negative=month[-3]
four_negative=month[-4]
print("one_negative:{}".format(one_negative))
print("two_negative:{}".format(two_negative))
print("three_negative:{}".format(three_negative))
print("four_negative:{}".format(four_negative))

输出结果为:

one:january
two:february
three:match
four:aprill
one_negative:december
two_negative:november
three_negative:october
four_negative:september

 从输出结果看出,正向索引从序列的第一个元素开始,索引0.然后逐渐递增。负向索引从序列的最后一个元素开始,索引为(-1),然后逐渐递减。两种索引方式可以根据自己的需求使用,比如:想要得到靠前的几个元素时,可以使用正数索引会容易数一些。当想要得到靠后面的几个元素时,可以使用负数索引会容易数一些。当然,也没有规定一定要用哪一种或者哪一种更好。可以完全根据自己的喜好和习惯来。

2、切片:除了通过索引来获取当个元素外,我们也可以通过切片来获取一定范围内的元素。比如获取从索引值为2到索引值为7的元素。使用两个索引并用冒号分隔。且遵循包前不包尾的规则。例如:

month=["january","february","match","aprill","may","june","july","august","september","october","november","december"]
#包头不包尾
number=month[2:3]
#而要访问包括最后一个元素,可以使用
number_end=month[2:12]
number_nege=month[-3:-1]
print("number:{}".format(number))
print("number_end:{}".format(number_end))
print("number_nega:{}".format(number_nege))

输出结果是:

number:['match']
number_end:['match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
number_nega:['october', 'november']

现在,我们可以尝试这样的一种操作,

number_negative=month[-3:0]
print("number_negative:{}".format(number_negative))

 我们可以尝试着猜一猜答案。答案可能会令你吃一惊。

number_negative:[]

 对,没看错,是空值。执行切片操作的时候,有这样一个规则,如果第一个索引指定的元素位于第二个索引指定的元素后面,那么结果就是空序列。

另外,我们可以使用简写的方式来省略索引:

如果切片结束于末尾,可以省略第二个索引:

如果切片开始于开头,可以省略第一个索引:

如果要复制整个序列,可以省略两个索引:

ellipsis_end=month[3:]
ellipsis_stary=month[:4]
ellipsis_all=month[:]
print("ellipsis_end:{}".format(ellipsis_end))
print("ellipsis_stary:{}".format(ellipsis_stary))
print("ellipsis_all:{}".format(ellipsis_all))

输出的结果是:

ellipsis_end:['aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
ellipsis_stary:['january', 'february', 'match', 'aprill']
ellipsis_all:['january', 'february', 'match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']

 接下来来看另一个问题:步长。

当执行切片操作时,我们显示或者隐式的指定起点和终点,但忽略了另一个参数:步长。在切片时,默认的步长是1,表示从一个元素移动到下一个元素,因此切片包含起点和终点之间的所有元素,例如:

step_size1=month[2:12:1]
print("step_size1:{}".format(step_size1))

其输出结果为:

step_size1:['match', 'aprill', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']

现在我们来看一下步长为其他值时的结果:

step_size2=month[::2]
step_size3=month[::3]
step_size4=month[::4]
step_size5=month[::5]
print("step_size2:{}".format(step_size2))
print("step_size3:{}".format(step_size3))
print("step_size4:{}".format(step_size4))
print("step_size5:{}".format(step_size5))

输出结果为:

step_size2:['january', 'match', 'may', 'july', 'september', 'november']
step_size3:['january', 'aprill', 'july', 'october']
step_size4:['january', 'may', 'september']
step_size5:['january', 'june', 'november']

 下面我们试一下当步长为负数时的情景:

step_size_2=month[8:3:-1]
step_size_3=month[::-2]
step_size_4=month[-2:-12:-4]
step_size_5=month[1:8:-2]
print("step_size_2:{}".format(step_size_2))
print("step_size_3:{}".format(step_size_3))
print("step_size_4:{}".format(step_size_4))
print("step_size_5:{}".format(step_size_5))

 输出结果为:

step_size_2:['september', 'august', 'july', 'june', 'may']
step_size_3:['december', 'october', 'august', 'june', 'aprill', 'february']
step_size_4:['november', 'july', 'match']
step_size_5:[]

现在我们总结一下切片:当前我们接触到的切片包括三个参数:起始索引,终点索引,步长。当步长为正数时,向左移动。当步长为负数时,向右移动。规则:如果第一个索引指定的元素位于第二个索引指定的元素后面,那么结果就是空序列。

猜你喜欢

转载自blog.csdn.net/qq_36581957/article/details/83868058