python 3个嵌套循环 和很变量
能帮忙解答一下这个代码到底该怎么理解比较好简单理解吗?
def randixsort(ds):
if ds != [] : ### 如果不为空,往下执行
length = len(ds[0]) ### 获取ds长度 ,默认ds内所有字符串长度相同
for i in range(length-1,-1,-1) : ### 等价于 range(length)
distributed = [[] for _ in range(10)] ### distributed = [[], [], [], [], [], [], [], [], [], []]
for d in ds : ### 遍历原始ds,根据字符串对应位置数字插入不同位置。
distributed[int(d[i])].append(d) ### 关键~根据字符串最末的位置放入distributed 不同的索引,越小的末位约靠前。
### 并且在下文把distributed赋给ds.
### 所以最后的结果是做到了数组内的排序
# print(distributed)
ds =[]
for d in distributed :
ds += d
# print(ds)
return ds
else :
return []
print(randixsort([]))
print(randixsort(["239"]))
print(randixsort(["170","045","075","090","002","024","066","800"]))
因为是从这一系列篇的开头,是说整个python3爬虫的一个架构,但是后面几篇例子呢,写的文章也没有这么多复杂的文件,于是决定开一篇,对着具体的流程介绍这个:
python3爬虫系列01之结构:爬虫整体架与常用模块库介绍
中的方案,今天这个就是按照这个流程写的一个爬虫例子,在爬虫项目中可能使用到。
整个代码的流程如图:
关于Python中嵌套循环和多变量的问题,参考资料中给出了多种解决方案,其中最常见的是使用生成式、chain迭代器、ChainMap等方式进行嵌套循环处理。具体代码实现如下:
使用生成式:
{k: v for d in dicts for k, v in d.items()} # iteritems in Python 2.7 或在python 2.6中(也许在引入生成器表达式时早在2.4中): dict((k, v) for d in dicts for k, v in d.items())
使用itertools.chain迭代器:
import itertools z = dict(itertools.chain(x.iteritems(), y.iteritems()))
使用ChainMap:
from collections import ChainMap x = {'a':1, 'b': 2} y = {'b':10, 'c': 11} z = ChainMap({}, y, x)
除了以上的实现方式,参考资料中也给出了对性能进行时间分析的代码,可以根据实际情况选择最优的方式进行处理。
关于多变量的问题,在Python中可以使用元组来实现多变量解包,例如:
x, y, z = (1, 2, 3) print(x, y, z) # 输出:1 2 3
在嵌套循环中,也可以使用多变量进行解包,例如:
for i, j in [(1, 2), (3, 4)]: print(i, j) # 输出:1 2 3 4
关于代码解读方面,具体要看具体的代码实现,可以结合具体的代码示例和参考资料进行学习和理解。
参考资料: - Python中将两个字典合并为一个字典 - Python如何判断一个字符串是否包含另一个字符串? - Python实现视频自动打码 - Python中的变量作用域及LEGB规则 - Python中多个变量同时赋值