python 列表切片

这篇内容我们通过简单的示例来学习如何处理列表的一部分,这在python中称之为切片。

下面我们通过获取一个成员列表中指定元素的实例来说明如何使用。

#group members
groups = ["张三","李四","王五","赵六","老七"];

#print the members range of 0-2
print(groups[0:3]);

在上述代码中,我们特别注意的是groups[0:3] 的写法,其中0:3分别代表的是从列表第一个元素开始,到第三个元素终止。这样的写法在前面大家也见过,如果没有印象的话,可以回想一下range函数的使用。

上述代码打印的也是一个列表,不过是group列表的子集,输出大家可以参考以下:

['张三', '李四', '王五']

当然了,大家可以指定任意范围的元素索引来提取我们想要的信息。

如果,我们没有指定第一个索引位置,会发生什么情况呢?

print(groups[:3]);

这样的python代码会输出什么内容呢?

['张三', '李四', '王五']

这是我想让大家注意的一点,如果没有指定第一个索引,python会默认从0开始处理列表,那么大家看到这里可能会想到,如果没有指定终止索引呢?

答案和你们想的一样,如果没有指定最后一个索引,python会从列表末尾终止。

print(groups[0:]);

输出:

['张三', '李四', '王五', '赵六', '老七']

那假如我们指定的列表索引超出了界限,python会如何处理呢?

假如有如下代码:

print(groups[0:10]);

会和我们预想的一样python给我们提示列表越界吗?

['张三', '李四', '王五', '赵六', '老七']

没有,python还是正常的打印了整个列表并没有提示有任何的错误。

前面学习过range函数,想必大家对下面的代码应该不陌生吧。

#print the members range of 0-2
print(groups[-3:]);

这行代码是从group列表的末尾第三个元素开始至列表末尾结束。这点大家想必很容易理解。大家只要记住:负数索引返回的的是距离列表末尾相应距离的元素。

输出:

['王五', '赵六', '老七']

至于如何遍历切片结果,这点参考前面学习过的for循环的使用,下面给一个简单的列子:

#group members
groups = ["张三","李四","王五","赵六","老七"];

#print the members range of 0-2
for member in groups[0:3]:
    print("current member is:" + member);

输出:

current member is:张三
current member is:李四
current member is:王五

在很多情况下,在我们的程序中需要对列表进行复制然后创建一个全新的列表。
大家可能第一想到的是下面这种写法:

#group members
groups = ["张三","李四","王五","赵六","老七"];

new_groups = groups;

print("groups:");
print(groups);

print("new groups:");
print(new_groups);

输出和大家预想的一样,两者的输出是相同的:

groups:
['张三', '李四', '王五', '赵六', '老七']
new groups:
['张三', '李四', '王五', '赵六', '老七']

那么,我们突然对new groups列表新增一个成员,两者的输出还会一致吗?

new_groups.append("老八");

好了,老八加入了这个成员俱乐部,那么原来的列表应该没有老八这个人吧,我们在打印一下这两个列表:

groups:
['张三', '李四', '王五', '赵六', '老七', '老八']
new groups:
['张三', '李四', '王五', '赵六', '老七', '老八']

咦,怎么两个列表都有老八呢?明明只会对新的列表增加了一个人,为什么会对原来的列表产生影响呢?

在python中这种赋值语法其实是将变量groups和new_groups 关联在了一起,两者都是指向了同一个列表。

那么该何如避免这个问题呢?

切片,上面提到了切片这个概念,通过切片产生了一个新的列表,这就相当于又重新创建了一个列表,这样通过使用切片进行赋值的列表就没有了关联关系,自然不会产生影响。

#group members
groups = ["张三","李四","王五","赵六","老七"];

new_groups = groups[:];
new_groups.append("老八");

print("groups:");
print(groups);

print("new groups:");
print(new_groups);

输出:

groups:
['张三', '李四', '王五', '赵六', '老七']
new groups:
['张三', '李四', '王五', '赵六', '老七', '老八']

猜你喜欢

转载自blog.csdn.net/qingyulove/article/details/80364418