python基础知识——基本的数据类型2——列表,元组,字典,集合

磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把——整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的。

一、列表

1.列表的全部方法

如:[‘1‘,‘2‘]、[‘wupeiqi‘, ‘alex‘]

1 >>> dir(list)
2 [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]

每个列表都具备如下功能:

  1 class list(object):
  2     """
  3     list() -> new empty list
  4     list(iterable) -> new list initialized from iterable‘s items
  5     """在数组的末尾新增一项
  6     def append(self, p_object): # real signature unknown; restored from __doc__
  7         """
  8         L.append(object) -- append object to end """
  9         pass
 10
 11     def count(self, value): # real signature unknown; restored from __doc__
 12         """ 查看lst中某一项出现的次数
 13         L.count(value) -> integer -- return number of occurrences of value """
 14         return 0
 15
 16     def extend(self, iterable): # real signature unknown; restored from __doc__
 17         """将原列表与其他列表扩展成新列表
 18         L.extend(iterable) -- extend list by appending elements from the iterable """
 19         pass
 20
 21     def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__
 22         """返回列表中第一个匹配项的下标,找不到会报错
 23         L.index(value, [start, [stop]]) -> integer -- return first index of value.
 24         Raises ValueError if the value is not present.
 25         """
 26         return 0
 27
 28     def insert(self, index, p_object): # real signature unknown; restored from __doc__
 29         """在指定位置插入项
 30         L.insert(index, object) -- insert object before index """
 31         pass
 32
 33     def pop(self, index=None): # real signature unknown; restored from __doc__
 34         """返回指定位置的值,并将其从列表中删除。默认对末尾项操作
 35         L.pop([index]) -> item -- remove and return item at index (default last).
 36         Raises IndexError if list is empty or index is out of range.
 37         """
 38         pass
 39
 40     def remove(self, value): # real signature unknown; restored from __doc__
 41         """从列表中移除第一个符合与指定值相等的项
 42         L.remove(value) -- remove first occurrence of value.
 43         Raises ValueError if the value is not present.
 44         """
 45         pass
 46
 47     def reverse(self): # real signature unknown; restored from __doc__
 48         """列表反转
 49         L.reverse() -- reverse *IN PLACE* """
 50         pass
 51
 52     def sort(self, cmp=None, key=None, reverse=False): # real signature unknown; restored from __doc__
 53         """排序,数字、字符串按照ASCII,中文按照unicode从小到大排序。
 54         L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
 55         cmp(x, y) -> -1, 0, 1
 56         """
 57         pass
 58
 59     def __add__(self, y): # real signature unknown; restored from __doc__
 60         """ 字符串拼接
 61         x.__add__(y) <==> x+y """
 62         pass
 63
 64     def __contains__(self, y): # real signature unknown; restored from __doc__
 65         """ 判断列表中是否包含某一项
 66         x.__contains__(y) <==> y in x """
 67         pass
 68
 69     def __delitem__(self, y): # real signature unknown; restored from __doc__
 70         """删除列表中指定下标的项
 71         x.__delitem__(y) <==> del x[y] """
 72         pass
 73
 74     def __delslice__(self, i, j): # real signature unknown; restored from __doc__
 75         """删除指定下标之间的内容,向下包含
 76         x.__delslice__(i, j) <==> del x[i:j]
 77
 78                    Use of negative indices is not supported.
 79         """
 80         pass
 81
 82     def __eq__(self, y): # real signature unknown; restored from __doc__
 83         """ 判断两个列表是否相等
 84         x.__eq__(y) <==> x==y """
 85         pass
 86
 87     def __getattribute__(self, name): # real signature unknown; restored from __doc__
 88         """ 无条件被调用,通过实例访问属性。
 89         x.__getattribute__(‘name‘) <==> x.name """
 90         pass
 91
 92     def __getitem__(self, y): # real signature unknown; restored from __doc__
 93         """ x.__getitem__(y) <==> x[y] """
 94         pass
 95
 96     def __getslice__(self, i, j): # real signature unknown; restored from __doc__
 97         """
 98         x.__getslice__(i, j) <==> x[i:j]
 99
100                    Use of negative indices is not supported.
101         """
102         pass
103
104     def __ge__(self, y): # real signature unknown; restored from __doc__
105         """ x.__ge__(y) <==> x>=y """
106         pass
107
108     def __gt__(self, y): # real signature unknown; restored from __doc__
109         """ x.__gt__(y) <==> x>y """
110         pass
111
112     def __iadd__(self, y): # real signature unknown; restored from __doc__
113         """ x.__iadd__(y) <==> x+=y """
114         pass
115
116     def __imul__(self, y): # real signature unknown; restored from __doc__
117         """
118         x.__imul__(y) <==> x*=y """
119         pass
120
121     def __init__(self, seq=()): # known special case of list.__init__
122         """
123         list() -> new empty list
124         list(iterable) -> new list initialized from iterable‘s items
125         # (copied from class doc)
126         """
127         pass
128
129     def __iter__(self): # real signature unknown; restored from __doc__
130         """ x.__iter__() <==> iter(x) """
131         pass
132
133     def __len__(self): # real signature unknown; restored from __doc__
134         """ x.__len__() <==> len(x) """
135         pass
136
137     def __le__(self, y): # real signature unknown; restored from __doc__
138         """ x.__le__(y) <==> x<=y """
139         pass
140
141     def __lt__(self, y): # real signature unknown; restored from __doc__
142         """ x.__lt__(y) <==> x<y """
143         pass
144
145     def __mul__(self, n): # real signature unknown; restored from __doc__
146         """ x.__mul__(n) <==> x*n """
147         pass
148
149     @staticmethod # known case of __new__
150     def __new__(S, *more): # real signature unknown; restored from __doc__
151         """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
152         pass
153
154     def __ne__(self, y): # real signature unknown; restored from __doc__
155         """ x.__ne__(y) <==> x!=y """
156         pass
157
158     def __repr__(self): # real signature unknown; restored from __doc__
159         """ x.__repr__() <==> repr(x) """
160         pass
161
162     def __reversed__(self): # real signature unknown; restored from __doc__
163         """ L.__reversed__() -- return a reverse iterator over the list """
164         pass
165
166     def __rmul__(self, n): # real signature unknown; restored from __doc__
167         """ x.__rmul__(n) <==> n*x """
168         pass
169
170     def __setitem__(self, i, y): # real signature unknown; restored from __doc__
171         """ x.__setitem__(i, y) <==> x[i]=y """
172         pass
173
174     def __setslice__(self, i, j, y): # real signature unknown; restored from __doc__
175         """
176         x.__setslice__(i, j, y) <==> x[i:j]=y
177
178                    Use  of negative indices is not supported.
179         """
180         pass
181
182     def __sizeof__(self): # real signature unknown; restored from __doc__
183         """ L.__sizeof__() -- size of L in memory, in bytes """
184         pass
185
186     __hash__ = None
187
188 list
189
190 list Code

help(list)

2.列表的常用方法
 (1)append:向列表中添加项

     insert:在列表的指定位置加入值

     extend:列表的扩展;那么列表可以自己扩展自己么???当然是可以的啦!

 1 >>>
 2 >>> a = [1,2,3,4]
 3 >>> a.append(5)
 4 >>> a
 5 [1, 2, 3, 4, 5]
 6 >>> b = [6,7]
 7 >>> a.extend(b)
 8 >>> a
 9 [1, 2, 3, 4, 5, 6, 7]
10 >>> a.insert(2,0)
11 >>> a
12 [1, 2, 0, 3, 4, 5, 6, 7]

(2)index:返回列表中第一个匹配项的下标

   __contain__:查看列表中是否包含某一项

   count:查看列表中某一项出现的次数

 1 >>> a
 2 [1, 2, 0, 3, 4, 5, 6, 7]
 3 >>> a.index(0)
 4 2
 5 >>> a.__contains__(7)
 6 True
 7 >>> a.__contains__(8)
 8 False
 9 >>> a.count(5)
10 1

(3)pop:删除并返回指定下标的值,默认为列表的最后一个值

   remove:删除列表中与指定值匹配的第一个值

__delitem__:删除指定下标的值

   __delslice__:删除指定下标区域内的所有值,下标向下包含

 1 >>> a
 2 [1, 2, 0, 3, 4, 5, 6, 7]
 3 >>> a.pop()
 4 7
 5 >>> a
 6 [1, 2, 0, 3, 4, 5, 6]
 7 >>> a.pop(2)
 8 0
 9 >>> a
10 [1, 2, 3, 4, 5, 6]
11 >>> a.remove(2)
12 >>> a
13 [1, 3, 4, 5, 6]
14 >>> a.__delitem__(0)
15 >>> a
16 [3, 4, 5, 6]
17 >>> a.__delslice__(0,2)
18 >>> a
19 [5, 6]

(4)reverse:列表反转,这个反转并没有什么编码顺序,就是单纯的把原来的列表从头到尾调转过来而已。。。
     sort:排序,数字、字符串按照ASCII,中文按照unicode从小到大排序。

1 >>> a = [5,4,6,8,2,6,9]
2 >>> a.sort()
3 >>> a
4 [2, 4, 5, 6, 6, 8, 9]
5 >>> a.reverse()
6 >>> a
7 [9, 8, 6, 6, 5, 4, 2]

3.列表的索引和切片

 1 >>> list(range(10))
 2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 3 >>> l=list(range(10))
 4 >>> l
 5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 6 >>> l[:3]
 7 [0, 1, 2]
 8 >>> l[3:5]
 9 [3, 4]
10 >>> l[-5:-3]
11 [5, 6]
12 >>> l[-5:]
13 [5, 6, 7, 8, 9]
14 >>> l[::2]
15 [0, 2, 4, 6, 8]
16 >>> (0,1,2,3,4,5,6)[:3]      #元组也是列表只是不能改,所以也可以切片,得到的还是元组
17 (0, 1, 2)
18 >>> ‘zhenghaolovexiaokai‘[::2] #字符串可以看成列表
19 ‘zegalvxaki‘

列表和字符串 两种类型的数据,有共同的地方,它们都属于序列(都是一些对象按照某个次序排列起来,这就是序列的最大特征),因此,就有很多类似的地方。如刚才演示的索引和切片,是非常一致的。

 1 >>> l=[1,2,3,4,5]
 2 >>> l[1]
 3 2
 4 >>> l.index(2)
 5 1
 6 >>> l[1]=1      #直接赋值修改,给覆盖了
 7 >>> l
 8 [1, 1, 3, 4, 5]
 9 >>> s=‘asdfg‘   #字符串不可修改
10 >>> s[0]=‘b‘
11 Traceback (most recent call last):
12   File "<stdin>", line 1, in <module>
13 TypeError: ‘str‘ object does not support item assignment
14 >>> 

4.通过extend()方法学习什么是可迭代的?

1 help(list.extend)  #extend的参数必须是可迭代的。
2
3 extend(...) L.extend(iterable) -- extend list by appending elements from the iterable
1 >>> l=[1,2,3]
2 >>> s=‘python‘
3 >>> lst=[7,8,9]
4 >>> lst.extend(l) #列表是可迭代的
5 >>> lst
6 [7, 8, 9, 1, 2, 3]
7 >>> lst.extend(s)
8 >>> lst
9 [7, 8, 9, 1, 2, 3, ‘p‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]

>>> i=8     #整型不是可迭代的
   >>> lst.extend(i)
   Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   TypeError: ‘int‘ object is not iterable

这就报错了。错误提示中告诉我们,那个数字 8,是 int 类型的对象,不是 iterable 的

这里用内建函数 hasattr()判断一个字符串和列表是否是可迭代的?——得出字符串不是可迭代的,而列表是可迭代的

1 >>> str=‘python‘
2 >>> hasattr(str,‘__iter__‘)
3 False
4 >>> lst=[1,2]
5 >>> hasattr(lst,‘__iter__‘)
6 True

hasattr()的判断本质就是看那个类型中是否有__iter__函数。还可以用 dir()找一找,在数字、字符串、列表中,谁有__iter__。同样还可找一找 元组,字典两种类型对象是否含有这个方法。

5.列表重要特征:

列表是可以修改的。这种修改,不是复制一个新的,而是在原地进行修改。

没有返回值,即不能赋值给某个变量。

1 >>> lst=[7,8,9]
2 >>> id(lst)
3 139795244578144
4 >>> lst.append(5)
5 >>> lst
6 [7, 8, 9, 5]
7 >>> id(lst)
8 139795244578144
1 >>> a=[1,2,3]
2 >>> b=a.extend([4,5,6]) #a原地修改了,没有返回值
3 >>> b          #所以b什么也没有得到
4 >>> a
5 [1, 2, 3, 4, 5, 6]

6.列表生成式

1 >>> [x*x for x in range(1, 11) if x%2==0]
2 [4, 16, 36, 64, 100]
3 >>> [m+n for m in ‘abc‘ for n in ‘asd‘]  #两层循环
4 [‘aa‘, ‘as‘, ‘ad‘, ‘ba‘, ‘bs‘, ‘bd‘, ‘ca‘, ‘cs‘, ‘cd‘]

7.字符串和列表比较

都属于序列类型的数据,很多方法很类似总结

list 和 str 的最大区别是:list 是可以改变的,str 不可变

二、元组

1.元组的全部方法

如:(11,22,33)、(‘zhenghao‘, ‘xiaokai‘)

1 1 >>> dir(tuple)
2 2 [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘count‘, ‘index‘] 

 1 Help on class tuple in module __builtin__:
 2
 3 class tuple(object)
 4  |  tuple() -> empty tuple
 5  |  tuple(iterable) -> tuple initialized from iterable‘s items
 6  |
 7  |  If the argument is a tuple, the return value is the same object.
 8  |
 9  |  Methods defined here:
10  |
11  |  __add__(...)
12  |      x.__add__(y) <==> x+y
13  |
14  |  __contains__(...)
15  |      x.__contains__(y) <==> y in x
16  |
17  |  __eq__(...)
18  |      x.__eq__(y) <==> x==y
19  |
20  |  __ge__(...)
21  |      x.__ge__(y) <==> x>=y
22  |
23  |  __getattribute__(...)
24  |      x.__getattribute__(‘name‘) <==> x.name
25  |
26  |  __getitem__(...)
27  |      x.__getitem__(y) <==> x[y]
28  |
29  |  __getnewargs__(...)
30  |
31  |  __getslice__(...)
32  |      x.__getslice__(i, j) <==> x[i:j]
33  |
34  |      Use of negative indices is not supported.
35  |
36  |  __gt__(...)
37  |      x.__gt__(y) <==> x>y
38  |
39  |  __hash__(...)
40  |      x.__hash__() <==> hash(x)
41  |
42  |  __iter__(...)
43  |      x.__iter__() <==> iter(x)
44  |
45  |  __le__(...)
46  |      x.__le__(y) <==> x<=y
47  |
48  |  __len__(...)
49  |      x.__len__() <==> len(x)
50  |
51  |  __lt__(...)
52  |      x.__lt__(y) <==> x<y
53  |
54  |  __mul__(...)
55  |      x.__mul__(n) <==> x*n
56  |
57  |  __ne__(...)
58  |      x.__ne__(y) <==> x!=y
59  |
60  |  __repr__(...)
61  |      x.__repr__() <==> repr(x)
62  |
63  |  __rmul__(...)
64  |      x.__rmul__(n) <==> n*x
65  |
66  |  count(...)
67  |      T.count(value) -> integer -- return number of occurrences of value
68  |
69  |  index(...)
70  |      T.index(value, [start, [stop]]) -> integer -- return first index of value.
71  |      Raises ValueError if the value is not present.
72  |
73  |  ----------------------------------------------------------------------
74  |  Data and other attributes defined here:
75  |
76  |  __new__ = <built-in method __new__ of type object>
77  |      T.__new__(S, ...) -> a new object with type S, a subtype of T
78
79 None

2.元组和字符串,列表的比较

tuple 是一种序列类型的数据,这点上跟 list/str 类似。它的特点就是其中的元素不能更改,所以也就没有添加,删除,修改等方法,这点上跟列表不同,倒是跟字符串类似;它的元素又可以是任何类型的数据,这点上跟 list 相同,但不同于 str。

 1 >>> tup=(1, ‘python‘, [3,4], (5,6)) #元组的元素可以任意类型,和列表类似
 2 >>> tup[1]  #元组的索引,是序列类型
 3 ‘python‘
 4 >>> tup[1]=2  #元组元素不可原地修改,和字符串类似
 5 Traceback (most recent call last):
 6   File "<stdin>", line 1, in <module>
 7 TypeError: ‘tuple‘ object does not support item assignment
 8 >>> tup.append(2) #元素不可更改,没有此方法,和str类似
 9 Traceback (most recent call last):
10   File "<stdin>", line 1, in <module>
11 AttributeError: ‘tuple‘ object has no attribute ‘append‘

>>> tup[2][0] 
   3
   >>> tup[2].append(5) #元组的元素之一为列表,所以通过修改列表,元组样子改变了,但是注意元组的元素还不没变
   >>> tup
   (1, ‘python‘, [3, 4, 5], (5, 6))

 

3.元组的索引和切片

4.tuple 用在哪里?

既然它是 list 和 str 的杂合,它有什么用途呢?不是用 list 和 str 都可以了吗?

在很多时候,的确是用 list 和 str 都可以了。但是,看官不要忘记,我们用计算机语言解决的问题不都是简单问题,就如同我们的自然语言一样,虽然有的词汇看似可有可无,用别的也能替换之,但是我们依然需要在某些情况下使用它们.

一般认为,tuple 有这类特点,并且也是它使用的情景:

  • Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
  • 如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
  • Tuples 可以在 dictionary(字典,后面要讲述) 中被用做 key,但是 list 不行。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
  • Tuples 可以用在字符串格式化中。

三、字典

1.字典的全部方法

如:{‘name‘: ‘zhenghao‘, ‘age‘: 18} 、{‘host‘: ‘127.0.0.1‘, ‘port‘: 8000]}

1 >>> dir(dict)
2 [‘__class__‘, ‘__cmp__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘clear‘, ‘copy‘, ‘fromkeys‘, ‘get‘, ‘has_key‘, ‘items‘, ‘iteritems‘, ‘iterkeys‘, ‘itervalues‘, ‘keys‘, ‘pop‘, ‘popitem‘, ‘setdefault‘, ‘update‘, ‘values‘, ‘viewitems‘, ‘viewkeys‘, ‘viewvalues‘]

2.字典的常用方法

  1 class dict(object):
  2     """
  3     dict() -> new empty dictionary
  4     dict(mapping) -> new dictionary initialized from a mapping object‘s
  5         (key, value) pairs
  6     dict(iterable) -> new dictionary initialized as if via:
  7         d = {}
  8         for k, v in iterable:
  9             d[k] = v
 10     dict(**kwargs) -> new dictionary initialized with the name=value pairs
 11         in the keyword argument list.  For example:  dict(one=1, two=2)
 12     """
 13
 14     def clear(self): # real signature unknown; restored from __doc__
 15         """ 清除内容 """
 16         """ D.clear() -> None.  Remove all items from D. """
 17         pass
 18
 19     def copy(self): # real signature unknown; restored from __doc__
 20         """ 浅拷贝 """
 21         """ D.copy() -> a shallow copy of D """
 22         pass
 23
 24     @staticmethod # known case
 25     def fromkeys(S, v=None): # real signature unknown; restored from __doc__
 26         """
 27         dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
 28         v defaults to None.
 29         """
 30         pass
 31
 32     def get(self, k, d=None): # real signature unknown; restored from __doc__
 33         """ 根据key获取值,d是默认值 """
 34         """ D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. """
 35         pass
 36
 37     def has_key(self, k): # real signature unknown; restored from __doc__
 38         """ 是否有key """
 39         """ D.has_key(k) -> True if D has a key k, else False """
 40         return False
 41
 42     def items(self): # real signature unknown; restored from __doc__
 43         """ 所有项的列表形式 """
 44         """ D.items() -> list of D‘s (key, value) pairs, as 2-tuples """
 45         return []
 46
 47     def iteritems(self): # real signature unknown; restored from __doc__
 48         """ 项可迭代 """
 49         """ D.iteritems() -> an iterator over the (key, value) items of D """
 50         pass
 51
 52     def iterkeys(self): # real signature unknown; restored from __doc__
 53         """ key可迭代 """
 54         """ D.iterkeys() -> an iterator over the keys of D """
 55         pass
 56
 57     def itervalues(self): # real signature unknown; restored from __doc__
 58         """ value可迭代 """
 59         """ D.itervalues() -> an iterator over the values of D """
 60         pass
 61
 62     def keys(self): # real signature unknown; restored from __doc__
 63         """ 所有的key列表 """
 64         """ D.keys() -> list of D‘s keys """
 65         return []
 66
 67     def pop(self, k, d=None): # real signature unknown; restored from __doc__
 68         """ 获取并在字典中移除 """
 69         """
 70         D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
 71         If key is not found, d is returned if given, otherwise KeyError is raised
 72         """
 73         pass
 74
 75     def popitem(self): # real signature unknown; restored from __doc__
 76         """ 获取并在字典中移除 """
 77         """
 78         D.popitem() -> (k, v), remove and return some (key, value) pair as a
 79         2-tuple; but raise KeyError if D is empty.
 80         """
 81         pass
 82
 83     def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
 84         """ 如果key不存在,则创建,如果存在,则返回已存在的值且不修改 """
 85         """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
 86         pass
 87
 88     def update(self, E=None, **F): # known special case of dict.update
 89         """ 更新
 90             {‘name‘:‘alex‘, ‘age‘: 18000}
 91             [(‘name‘,‘sbsbsb‘),]
 92         """
 93         """
 94         D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 95         If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
 96         If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
 97         In either case, this is followed by: for k in F: D[k] = F[k]
 98         """
 99         pass
100
101     def values(self): # real signature unknown; restored from __doc__
102         """ 所有的值 """
103         """ D.values() -> list of D‘s values """
104         return []
105
106     def viewitems(self): # real signature unknown; restored from __doc__
107         """ 所有项,只是将内容保存至view对象中 """
108         """ D.viewitems() -> a set-like object providing a view on D‘s items """
109         pass
110
111     def viewkeys(self): # real signature unknown; restored from __doc__
112         """ D.viewkeys() -> a set-like object providing a view on D‘s keys """
113         pass
114
115     def viewvalues(self): # real signature unknown; restored from __doc__
116         """ D.viewvalues() -> an object providing a view on D‘s values """
117         pass
118
119     def __cmp__(self, y): # real signature unknown; restored from __doc__
120         """ x.__cmp__(y) <==> cmp(x,y) """
121         pass
122
123     def __contains__(self, k): # real signature unknown; restored from __doc__
124         """ D.__contains__(k) -> True if D has a key k, else False """
125         return False
126
127     def __delitem__(self, y): # real signature unknown; restored from __doc__
128         """ x.__delitem__(y) <==> del x[y] """
129         pass
130
131     def __eq__(self, y): # real signature unknown; restored from __doc__
132         """ x.__eq__(y) <==> x==y """
133         pass
134
135     def __getattribute__(self, name): # real signature unknown; restored from __doc__
136         """ x.__getattribute__(‘name‘) <==> x.name """
137         pass
138
139     def __getitem__(self, y): # real signature unknown; restored from __doc__
140         """ x.__getitem__(y) <==> x[y] """
141         pass
142
143     def __ge__(self, y): # real signature unknown; restored from __doc__
144         """ x.__ge__(y) <==> x>=y """
145         pass
146
147     def __gt__(self, y): # real signature unknown; restored from __doc__
148         """ x.__gt__(y) <==> x>y """
149         pass
150
151     def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
152         """
153         dict() -> new empty dictionary
154         dict(mapping) -> new dictionary initialized from a mapping object‘s
155             (key, value) pairs
156         dict(iterable) -> new dictionary initialized as if via:
157             d = {}
158             for k, v in iterable:
159                 d[k] = v
160         dict(**kwargs) -> new dictionary initialized with the name=value pairs
161             in the keyword argument list.  For example:  dict(one=1, two=2)
162         # (copied from class doc)
163         """
164         pass
165
166     def __iter__(self): # real signature unknown; restored from __doc__
167         """ x.__iter__() <==> iter(x) """
168         pass
169
170     def __len__(self): # real signature unknown; restored from __doc__
171         """ x.__len__() <==> len(x) """
172         pass
173
174     def __le__(self, y): # real signature unknown; restored from __doc__
175         """ x.__le__(y) <==> x<=y """
176         pass
177
178     def __lt__(self, y): # real signature unknown; restored from __doc__
179         """ x.__lt__(y) <==> x<y """
180         pass
181
182     @staticmethod # known case of __new__
183     def __new__(S, *more): # real signature unknown; restored from __doc__
184         """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
185         pass
186
187     def __ne__(self, y): # real signature unknown; restored from __doc__
188         """ x.__ne__(y) <==> x!=y """
189         pass
190
191     def __repr__(self): # real signature unknown; restored from __doc__
192         """ x.__repr__() <==> repr(x) """
193         pass
194
195     def __setitem__(self, i, y): # real signature unknown; restored from __doc__
196         """ x.__setitem__(i, y) <==> x[i]=y """
197         pass
198
199     def __sizeof__(self): # real signature unknown; restored from __doc__
200         """ D.__sizeof__() -> size of D in memory, in bytes """
201         pass
202
203     __hash__ = None
204
205 dict
206
207 dict code

help(dict)

字典是python数据类型中的一大亮点,在其中占有着独特的地位,在这里先介绍一下字典的特性,和list不同,字典是无序的,没有索引和切片,它依靠key和value之间的联系进行索引,由于这种特殊的索引方式,字典中不可以有重复的key。

(1)keys/values/items:取所有字典的key/取所有字典的value/取所有字典的key,value

1 >>> dic={‘name‘:‘zhenghao‘, ‘age‘:20}
2 >>> dic.keys()
3 [‘age‘, ‘name‘]
4 >>> dic.values()
5 [20, ‘zhenghao‘]
6 >>> dic.items()
7 [(‘age‘, 20), (‘name‘, ‘zhenghao‘)]

(2)已知key的情况下,获取value的值时可以使用‘字典名[key值]’的方法,在循环遍历中,尽管字典提供了for k,v in dic.items()的方法,但是为了避免占用内存空间,我们还是遍历key,再利用key的值就可以获取到value啦!

    get:字典名[key值]的方式有一点弊端,那就是当key值不存在的时候会报错,这个时候我们使用get方法,可以避免报错的情况

 1 >>> dic={‘name‘:‘zhenghao‘, ‘age‘:20}
 2 >>> for n in dic:  #循环时默认循环的是keys
 3 ...     print ‘key:‘, n, ‘value:‘, dic[n]
 4 ...
 5 key: age value: 20
 6 key: name value: zhenghao
 7 >>> dic[‘name‘]
 8 ‘zhenghao‘
 9 >>> dic[‘score‘]  #会报错
10 Traceback (most recent call last):
11   File "<stdin>", line 1, in <module>
12 KeyError: ‘score‘
13 >>> dic.get(‘name‘)
14 ‘zhenghao‘
15 >>> dic.get(‘score‘) #不会报错
16 >>> 

(3)clear:清空字典

1 >>> dic.get(‘score‘)
2 >>> dic={‘name‘:‘zhenghao‘, ‘age‘:20}
3 >>> dic.clear()
4 >>> dic
5 {}
6 >>> 

(4)pop:根据指定的key删除一组数据

   popitem:随机的删除一组数据。。。我觉得这就是python在逗我。。。

(5)setdefault:dic.setdefault[key1],key1存在,则返回value1,不存在,则自动创建value = ‘None‘

1 >>> dic={‘name‘:‘zhenghao‘}
2 >>> dic.setdefault(‘name‘)
3 ‘zhenghao‘
4 >>> dic.setdefault(‘age‘)
5 >>> dic
6 {‘age‘: None, ‘name‘: ‘zhenghao‘}
7 >>> 

(6)update:dict1.update(dict2),判断dict2中的每一个key在dict1中是否存在,存在:就将dict1中的value更新成dict2中的,不存在:将key和value都复制过去

 1 >>> dic
 2 {‘age‘: None, ‘name‘: ‘E‘}
 3 >>> dic1 = dic
 4 >>>
 5 >>> dic1
 6 {‘age‘: None, ‘name‘: ‘E‘}
 7 >>> dic2 = {‘age‘: 18, ‘name‘: ‘E‘,‘gender‘:‘female‘}
 8 >>> dic1.update(dic2)
 9 >>> dic1
10 {‘name‘: ‘E‘, ‘gender‘: ‘female‘, ‘age‘: 18}

(7)fromkeys:可以通过list或元组创建一个字典,

  dict.fromkeys([1,2,3],‘test‘),可以创建一个字典,但是如果a.fromkeys([1,2,3],[]},创建的字典的值都是一个空列表,那么其中一个列表的值发生了变化,所有的列表都会跟着发生变化,因为这个方法就是很傻很天真的把所有value的指针指向了同一个列表。所以感觉这个方法也是逗我玩儿的。。。

>>> a = dict.fromkeys([1,2,3],‘test‘)
>>> a
{1: ‘test‘, 2: ‘test‘, 3: ‘test‘}
>>> a = dict.fromkeys([1,2,3],[])
>>> a[1].append(‘test‘)
>>> a
{1: [‘test‘], 2: [‘test‘], 3: [‘test‘]}

3.字典可以原地修改

1 >>> dic={}
2 >>> id(dic)
3 139795272803784
4 >>> dic[‘name‘]=‘zhenghao‘ #直接给键值
5 >>> dic
6 {‘name‘: ‘zhenghao‘}
7 >>> id(dic)
8 139795272803784
9 >>> 

3.字典的几种创建方法

4.字典练习题

1 练习:元素分类
2 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于等于 66 的值保存至第二个key的值中。
3 即: {‘k1‘: 大于66 , ‘k2‘: 小于等于66}

回答:

a=[11,22,33,44,55,66,77,88,99,90]
dict1={‘k1‘:[],‘k2‘:[]}

for i in a:
    if i >66:
        dict1[‘k1‘].append(i)
    else:
        dict1[‘k2‘].append(i)
print dict1

最好的是用下面的方法来动态的扩展字典:
a=[11,22,33,44,55,66,77,88,99,90]
dict1={}  #动态的增加字典

for i in a:
    if i >66:
        if ‘k1‘ in dict1.keys():
            dict1[‘k1‘].append(i)
        else:
            dict1[‘k1‘] = [i,]
    else:
        if ‘k2‘ in dict1.keys():
            dict1[‘k2‘].append(i)
        else:
            dict1[‘k2‘] = [i,]
print dict1
时间: 2024-08-03 23:42:12

python基础知识——基本的数据类型2——列表,元组,字典,集合的相关文章

python 数据类型 变量 列表 元组 字典 集合

Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等. 浮点数 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等

Python笔记第2章,文件,字符串,列表,元组,字典,集合的使用

<--目录--> 1)Python文件处理 2)字符串处理 3)列表.元组.字典的使用 4)集合的妙用 1.文件处理 文件处理模式 r 以只读模式打开文件 w 以只写模式打开文件 a 以追加模式打开文件 r+  为读写模式 rw跟r+一样,先读后写 w+  为写读模式,会先清空这个文件,再往里面写 a+  为追加模式 rb 以读写模式打开 wb 以写读模式打开 ab 以追加及读模式打开 +b 表示必须以二进制的模式处理文件,Windows系统上使用有效,Linux系统上使用无效,但工作中Lin

python中列表 元组 字典 集合的区别

列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复项的.如果我们扩大清单的范围,统计我们过去一周所有的花费情况,那么这也是一个清单,但这个清单里会有类别不同的项,比如我们买东西是一种花费,交水电费也是一种花费,这些项的类型是可以使不同的.pyt

数据类型之列表 元组 字典

数据类型| 表示形式 |  是否有序列 | 对象是否可变|访问顺序 数字     |   1234  |     没有下标  |  不可变 | 直接访问 字符串| 'asd3234'|     有下标    |    不可变  | 序列访问 元组  tuple |(1,'abc',[1,3] )|有下标 |  不可变  | 序列访问 列表 list | [1,'abc',(1,3),[2,3]] | 有下标 |  可变 | 序列访问 字典 dict |  {'key1':'values','ke

【Python基础知识】基本数据类型:数字、字符串、列表、元组、字典、集合

1.查看Python版本 python -V 2.Windows系统下使用命令行设置环境变量:path=%path%;D:\Python 3.几个重要的Python环境变量 PYTHONPATH PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面查找. PYTHONSTARTUP Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此变量指定的文件中的代码. PYTHONCASEOK 加入PYTHONCASEOK的环境变量,就会

python数据类型基础总结(字符串 列表 元组 字典 集合 )

字符串: 有序.不可变数据类型,支持索引,切片,步长(字符串中的每一个字母或字符都称为元素) 索引(下标):通过索引精确定位到每个元素 索引从左开始向右排 从0开始 索引时不能超过最大值,超出报错 从右向左排从-1开始 切片(顾头不顾尾) 步长 print(name[::2] 取整个字符串,步长为2 字符串方法: upper 全部大写 lower全部小写 capitalize 首字母大写 title每个单词的首字母大写 swapcase 大小写转换 starswith 以..开头 endswit

Python列表 元组 字典 集合

元组 Python中的元组(Tuple)类似于Java中的数组,一旦创建了一个 tuple,就不能以任何方式改变它.这点与Python中的字符串类似,所以我们说元组和字符串都是不可变的序列.元组也支持索引和分片操作. 定义一个元组使用一对小(圆)括号” ( ) “. #定义一个元组 tuple1 = (1, 2, '3', 4, '5') # 定义了一个元组之后就无法再添加或修改元组中的元素 print tuple1[0] # 元组的元素都有确定的顺序.元组的索引也是以0为基点的 print t

Python的列表&amp;元组&amp;字典&amp;集合

目录 列表(list) 列表的定义 列表的查询 增加数据 修改数据 删除数据 其它常用操作 元组(tuple) 元组的拆包 具名元组 字典(dict) 创建字典 字典添加数据 查询字典数据 修改字典数据 删除字典数据 其它操作 字典的遍历 集合(set) 集合的创建 访问集合 更新集合 删除集合 集合的操作符 集合应用 列表(list) ? 列表(list)是python以及其他语言中最常用到的数据结构之一.Python使用中括号 [ ] 来解析列表.列表是可变的(mutable)--可以改变列

3 - 列表 元组 字典 集合

列表 names = ['a','b','c','d','e','f','g','h','i','j','k','l'] names.append('a') #插入一个a names.extend(['q','m'])#拓展列表 names.remove('b') #删除b del names[1] #删除c name = names.pop(1) #移出d print(name) print(names.index('a')) #匹配第一个a的位置 print(names.count('a')