python-递归,字典,集合

查找dir

>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__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', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> 


一:递归

1:是调用了自身。2:设置了自身正确的返回值

递归的深度是100,如果要做爬虫类,需要加深,就要自己设置,

>>> import sys
>>> sys.setrecursionlimit(100)

def fan(n):
    if n == 1:
        return 1;
    else:
        return n * fan(n - 1)

number = int(input('请输入一个正整数:'))
result = fan(number)
print('%d 的阶乘是:%d' % (number, result))

但是比较消耗时间,和内存

函数的编写方式
def fanc(n):
    result = n
    for i in range(1, n):
        result *= i
    return result
number = int(input('请输入一个正整数:'))
result = fanc(number)
print('%d 的阶乘是:%d' % (number, result))

结果:
请输入一个正整数:3
3 的阶乘是:6

二:字典

 

 

1、用{}创建字典

代码:

1
2
=  { "a" : "1" "b" : "2" }
print  x

 

输出:

{'a': '1', 'b': '2'}

2、用内置函数dict()

1)、入参为类似a="1"的键值对

代码:

1
2
=  dict (a = "1" , b = "2" )
print  x

 

输出:

{'a': '1', 'b': '2'}

 

2)、入参为一个元组,元组内部是一系列包含两个值的元组,例如(("a", "1"), ("b", "2"))

代码:

1
2
=  dict ((( "a" "1" ), ( "b" "2" )))
print  x

 

输出

{'a': '1', 'b': '2'}

 

3)、入参为一个元组,元组内部是一系列包含两个值的列表,例如(["a", "1"], ["b", "2"])

代码:

 

1
2
=  dict (([ "a" "1" ], [ "b" "2" ]))
print  x

 

输出:

{'a': '1', 'b': '2'}

4)、入参为一个列表,列表内部是一系列包含两个值的元组,例如[("a", "1"),("b", "2")]

代码:

 

1
2
=  dict ([( "a" "1" ),( "b" "2" )])
print  x

输出:

{'a': '1', 'b': '2'}

 

5)、入参为一个列表,列表内部是一系列包含两个值的列表,例如[["a", "1"],["b", "2"]]

代码: 

 

1
2
=  dict ([[ "a" "1" ],[ "b" "2" ]])
print  x

输出:

{'a': '1', 'b': '2'}

注意:

  • 对于a="1"的方式初始化字典,字典的key只能为字符串,并且字符串不用加引号

  • 对于dict内置函数初始化当入参是一个元组时,例如1)、2),元组内部的两元素元组或者列表至少为两个,否则会出错

3、用户fromkeys方法创建字典,第一个

代码:

1
2
dict .fromkeys(( "a" "b" ),  1 )
print  x

 

输出:

{'a': 1, 'b': 1}

入参可以的第一个参数是一个列表或者元组,里边的值为key,第二个参数是所有key的value值


原文链接https://www.cnblogs.com/shijingxiang/articles/4585878.html


4:in、not:查找是否在里面

在字典中查找的是键不是值,在序列中查找的是值


>>> di = dict.fromkeys(range(4),'哈哈')
>>> print(di.get(2))
哈哈
>>> di.get(1)
'哈哈'

>>> 23 in di
False
>>> 1 in di
True
>>> 

5:清空clear

>>> di.clear()
>>> 
一般不采用a = {}方式直接置为空,请看下面

>>> a = {'xing':'sdf'}
>>> b = a
>>> a = {}
>>> b
{'xing': 'sdf'}
可以看到b依旧可以访问。但是如果是用clear

>>> a = {'xing':'sdf'}
>>> b = a
>>> a.clear()
>>> b
{}
>>> 

这样可以保证原数据被清空,个人可根据自己需要进行选择

6:copy:浅拷贝

>>> a = {1:'sdf', 2:'23'}
>>> b = a.copy()
>>> c = a
>>> id(a)
4383422216
>>> id(b)
4387235400     #浅拷贝地址是不一样的。
>>> id(c)
4383422216     #赋值的地址是一样的
>>> 

7:pop、popItem  移除

>>> a = {1:'sdf', 2:'23'}
>>> a.pop(1)
'sdf'
>>> a
{2: '23'}     #这里是随机弹,因为字典不跟数组一样有顺序
>>> 

>>> a = {1:24, 2:42, 3:34, 4:34}
>>> a.popitem()
(1, 24)
>>> a
{2: 42, 3: 34, 4: 34}
>>> 


8:setdefault 添加

>>> a.setdefault('234',23)
23
>>> a
{2: 42, 3: 34, 4: 34, 34: None, '234': 23}
>>> 

9:update:利用一个字典或映射关系去更新另外一个字典

>>> a
{2: 42, 3: 34, 4: 34, 34: None, '234': 23}
>>> b = {4:'哈哈哈'}
>>> a.update(b)
>>> a
{2: 42, 3: 34, 4: '哈哈哈', 34: None, '234': 23}
>>> 


三:集合

集合具有唯一性,具有剔除性

num2 = {2,2,4,3,5,6,3,5,5,6}
>>> num2
{2, 3, 4, 5, 6}

3.1:不支持索引

>>> num2[2]
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    num2[2]
TypeError: 'set' object does not support indexing
>>> 

3.2:创建set

>>> set1 = set([23,3,4,3,3])
>>> set1
{3, 4, 23}
>>> set2 = set((2,3,2,3,5,3))
>>> set2
{2, 3, 5}
>>>       #无序的列表 如果注重就要注意

3.3:用in 或者 not in 判断一个元素是否在集合中已经存在

>>> num2 = {2,2,3,4,5,6,7,8}
>>> 2 in num2
True
>>> 34 in num2
False
>>> 

3.4:添加 add  删除remove

>>> num2.add(34232)
>>> num2
{2, 3, 4, 5, 6, 7, 8, 34232}
>>> 
>>> num2.remove(3)
>>> num2
{2, 4, 5, 6, 7, 8, 34232}
>>> 

3.5:不可变集合:frozen

>>> nume = frozenset([1,2,3,3,4])
>>> nume.add(2)
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    nume.add(2)
AttributeError: 'frozenset' object has no attribute 'add'
>>> 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值