全国咨询/投诉热线:400-618-4000

人工智能之如何使用Python集合

更新时间:2017年12月26日15时04分 来源:传智播客 浏览次数:

定义集合

集合就像篮子,你可以放进和取出东西,可以是同一类的东西,也可以是不同类的。基本上,它是个让你收集东西的存储结构。

比如你有一个车的类型(car),创建了几种车,想把这些车放在一起又容易找到,就是运用集合非常好的场景。

集合存在于内存中。你不需要创建集合或者任何架板,这些都是现成的。只要有个变量就可以往里面放车子了。完了之后你就可以根据名字或者索引(在集合中的参数)把他们取出。

ython提供了许多自建类型归属于集合类,但是没有一个叫collection的类型,他们是lists,mappings,和sets。

list

列表:list是Python内置的一个数据类型。list是可变的允许添加同一类型或不同类型的元素,类似于其他语言中的指针。

下面的例子是创建列表并添加元素:

alist = ["item1", "item2", 4]

注意这个列表成分混杂,包含了字符串和整数类型。

要取回列表中的元素,只需引用该元素的索引序号。Python列表序号是从零开始的,如果我要最后一个元素,它是第3位,我需要用2来索引:

alist[2]

> 4

系统返回了4。取列表中的元素时,只要从它的位置减去1就得到正确的索引序号。

检查列表长度用len命令:

len(alist)

> 3

向列表添加元素用append()函数:

alist.append(False)

len(alist)

> 4

我们增加了一位列表长度,添加了一个数据类型—布尔类型。列表并没有表示任何不满。

我们可以调用remove()移除列表元素:

alist.remove("item2")

remove()没有返回参数,列表会被更新,现在它包含三个元素:

['item1', 4, False]

有几种方法将元素从列表中取出。我们前面说过用索引访问元素,如果我访问索引2,将会得到元素3。

thevalue = alist[2]

print(thevalue)

> False

上面的代码为我们复制了元素,元素还在列表中,列表的长度不会受到影响。

然而我们用pop(), 在得到元素的同时将元素移除了列表:

thevalue = alist.pop(1) print(thevalue)

> 4

print("after pop", alist)

> ['item1', False]

列表也可以被排序,我们有包含字符串的列表:

alpha = ["z", "b", "a", "c"]

你可以用sort()命令来排序:

alpha.sort()

没有返回值,但alpha已经被排序了,你可以打印出来看看:

print(alpha)

['a', 'b', 'c', 'z']

元素可以被反序排列,只需引用reverse():

alpha.reverse

字符串是列表吗?

字符串与列表有很多相似之处,但字符串是不可改动的,而列表可以随意修改。

字符串可以向列表一样索引。你可以像数列表中元素一样数出字符串中的字符。

比如:

mystring = "The quick brown fox."

print(len(mystring ))

> 20

print(mystring[4])

> q

和列表不一样的是你不能追加字符,也不能更改字符串中特定位置字符。

我们看一下给特定位置分配字符会出现什么情况:

mystring[4] = 'z'

> TypeError: 'str' object does not support item assignment

根据字符串,可以将它转化成列表。取上面用到的mystring变量,我们用split(),它会在空格断开:

stringlist = mystring.split()

stringlist

> ['The', 'quick', 'brown', 'fox.']

type(stringlist)

>

每个单词都变成了列表中的元素,我们也清楚的看到类型变为列表。

如果字符串没有空格我们也可以转换,但结果如何呢,看看吧:

mystring2 = "Thequickbrownfox."

stringlist2 = mystring2.split()

stringlist2

> ['Thequickbrownfox.']

type(stringlist2)

>

我们还是得到了一个列表,单只有一个元素。在这个例子中,这个转换没有多大用处。

mappings

mapping也是内置类型,只在字典中使用。字典是键/值对应的,不同于列表,我们不用序号索引,代之的是字典的键(key)。

类似列表创建字典用键/值成对而不是单一元素,给个例子:

mydictionary = {"item1":45, "item2":76, "item3":145}

每个键/值用冒号分开,前面是键后面是值。在第一个元素中,item1是键,45是值。同时注意我们用大括号来包住元素。

当从字典中取元素时,序号不可用了,那我们就该想到键。如果要item2,我们这样做:

mydictionary["item2]

> 76

和列表一样,可以查看字典的长度:

len(mydictionary)

> 3

改变item2的值,可以直接给他赋值:

mydictionary["item2] = 100

增加元素也是直接赋值:

mydictionary["item62"] = 433

item62现在就存在于字典了,字典长度加1。

根据键可以删除字典元素:

del mydictionary["item2"]

前面提到字典是键/值成对出现,如果我们只要键可以这样做:

mydictionary.keys()

> dict_keys(['item3', 'item1', 'item62'])

访问值也是同样的方法:

mydictionary.values()

> dict_values([145, 45, 433])

Sets

set是无序的集合,不能有重复的元素,也不能排序,sort()是不能使用的。

同列表相比set验证元素是否存在会更快。

创建一个set:

myset = {3, 4, 5, 1}

或者用set语句来转化已存在的类型:

multistory = [0,1,5,4,3,7,6,6]

myself = set(multistory)

> {0,1,3,4,5,6,7}

因为set只能包含唯一的元素,所以重复的6被移除了。从已有数据创建唯一元素集合,set()是个非常好的方法。

如果我试图让移除的6回来,它是不会理会的:

myself.add(6)

> {0, 1, 3, 4, 5, 6, 7}

要移除set中元素需要用remove():

myself.remove(4)

set也不支持索引,用序号来访问,它会返回错误:

myset[2] >TypeError: 'set' object does not support indexing

set有些独有的方法,如果你熟悉set的数学方法(difference,intersection和union),会很好用。

我们从difference开始,假设我有两个set:

set1 = {1,3,6,7}

set2 = {1,3,6,8,10}

用set1和set2做difference会得到7,7在set1而不在set2。

set1.difference(set2)

> {7}

反过来用set2和set1做对比:

set2.difference(set1)

> {8, 10}

也可以来找它们的相同部分:

set.intersection(set2)

> {1, 3, 6}

最后来看把它们合并起来形成一个新的set:

set3 = {set1.union(set2)

> {1, 3, 6, 7, 8, 10}

新的set包含它们两个中所有元素。

总结

我们看过了list,string(虽然不属于集合),dictionary和set。学习了它们所有的特定运算和独有功能。希望这个介绍可以让你对Python的集合多点认识。

本文版权归传智播客人工智能+Python学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客人工智能+Python学院

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额