这篇内容我们通过简单的示例来学习如何处理列表的一部分,这在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:
['张三', '李四', '王五', '赵六', '老七', '老八']