有a1,a2,a3,a4,四个数组,四个数组重新组合成一个数组(A),间隔是10个元素
好久没折腾Py了,这是去年年初2019.3月发在Q空间中的一个记录,因不从事这个,并且被在工厂耽误10几年,所以很少写Blog在这里,感觉这里比较正式且方便一些,
而在Q空间中只是随意性的记载,但发布图片总是需要另外保存再上传不能直接粘贴很不方便、耽误时间,cnblogs相对比较方便。
A_Combine = Array1[10]+Array2[10]+Array3[10]+Array4[10]
###============下面是Dephi群中别人的问题,我理解了一下问题描述如下,用PY实现====================
''' FileName = D:\Py_eg\egArray-20190328.py
1) 对列表的操作(zip,chain,类型转换)
2)函数及装饰器的应用
''' FileName = D:\Py_eg\egArray-20190328.py
1) 对列表的操作(zip,chain,类型转换)
2)函数及装饰器的应用
---------------------------------------------------------------------------------------------------------------------------------------
请教一下,有a1,a2,a3,a4,四个数组,每个数组长度100,不一定是可用range(start,end,step)生成的数据,是这个意思
有A数组,长度400,
有A数组,长度400,
想取
a1的1——10元素放到A的1——10
a2的1——10放到A的11——20,
a3的1——10放到A的20——30,
a4的1——10放到A的30——40,
a2的1——10放到A的11——20,
a3的1——10放到A的20——30,
a4的1——10放到A的30——40,
就是四个数组重新组合成一个数组(A),间隔是10个元素
-------------------------------------------------------------------------------------------------------------------------------------
1 print('*'*15,'a1数组','*'*15) 2 import string 3 from random import randint 4 #a1 = list(range(0,10,1)) ### a1 = [randint(0,100) for x in range(10)] 5 a1 = list(randint(0,100) for x in range(10)) #改进版a1 6 print('a1 = ',a1) 7 ls1=[str(i) for i in a1] ###此处转换成字符串的目的,只是假定要求的条件是字符串 8 print('a1 = ',ls1) 9 10 print('*'*15,'a2数组','*'*15) 11 #a2 = list(range(11,20,1)) 12 a2 = list(randint(0,100) for x in range(10)) #改进版a2 13 print('a2 = ',a2) 14 ls2=[str(i) for i in a2] 15 print('a2 = ',ls2) 16 17 18 print('*'*15,'a3数组','*'*15) 19 #a3 = list(range(0,10,1)) 20 a3 = list(randint(0,100) for x in range(10)) #改进版a3 21 print('a3 = ',a3) 22 ls3=[str(i) for i in a3] 23 print('a3 = ',ls3) 24 25 26 print('*'*15,'a4数组','*'*15) 27 #a4 = list(range(0,10,1)) 28 a4 = list(randint(0,100) for x in range(10)) #改进版a4 29 print('a4 = ',a4) 30 ls4=[str(i) for i in a4] 31 print('a4 = ',ls4) 32 33 34 print('===== 方法 一,练习水平1 =====') 35 a1.extend(a2) ###怎样能做到这种形式/但不用itertools.chain形式,当然后面写法是不对的((a1.extend(a2)).extend(a3)).extend(a4) 36 a1.extend(a3) 37 a1.extend(a4) 38 print('A_Combine = ',a1) 39 # def enumerate_A(): 40 # for i,value4 in enumerate(A_combine): 41 # print('A = ' +str(A_combine)) 42 # enumerate_A() 43 44 print('===== 方法 二,练习水平2, 方法Ok =====') 45 import itertools 46 A_After_Combine_2 = [] 47 for j in itertools.chain(ls1,ls2,ls3,ls4): 48 A_After_Combine_2.append(j) 49 print(A_After_Combine_2) 50 51 52 53 print('===== 方法 三 ,重复的、低劣=====') 54 print('=====a1函数形式=====') 55 def enumerate_fn_a1(): 56 a1 = list(range(1,11,1)) 57 for i,value1 in enumerate(ls1): ###思考: 此处需将4个列表的value一起迭代 (zip可成字典迭代,itertools.chain()可成链接) 58 #print('索引:' + str(i), '值 = ' +str(value)) 59 print('A' + str([i+1]), ' = ' +str(value1)) 60 enumerate_fn_a1() 61 62 print('=====a2函数形式=====') 63 def enumerate_fn_a2(): 64 a2 = list(range(11,21,1)) 65 for i,value2 in enumerate(ls2): 66 #print('索引:' + str(i), '值 = ' +str(value)) 67 print('A' + str([i+11]), ' = ' +str(value2)) 68 enumerate_fn_a2() 69 70 print('=====a3函数形式=====') 71 def enumerate_fn_a3(): 72 a3 = list(range(21,31,1)) 73 for i,value3 in enumerate(ls3): 74 #print('索引:' + str(i), '值 = ' +str(value)) 75 print('A' + str([i+21]), ' = ' +str(value3)) 76 enumerate_fn_a3() 77 78 print('=====a4函数形式=====') 79 def enumerate_fn_a4(): 80 a4 = list(range(31,41,1)) 81 for i,value4 in enumerate(ls4): 82 #print('索引:' + str(i), '值 = ' +str(value)) 83 print('A' + str([i+31]), ' = ' +str(value4)) 84 enumerate_fn_a4() 85 86 #list(enumerate_fn_a4) 87 88 ### 想定义一个函数A_Combine_fun,将返回值当作新定义函数A_Combine_fun的参数;然后再执行此函数赋值一个数组 89 #练习对装饰器的使用(装饰器实际上就是一个函数)
运行结果:
1 *************** a1数组 *************** 2 a1 = [16, 41, 56, 70, 12, 50, 28, 34, 60, 67] 3 a1 = ['16', '41', '56', '70', '12', '50', '28', '34', '60', '67'] 4 *************** a2数组 *************** 5 a2 = [63, 87, 93, 94, 60, 6, 6, 32, 89, 2] 6 a2 = ['63', '87', '93', '94', '60', '6', '6', '32', '89', '2'] 7 *************** a3数组 *************** 8 a3 = [96, 71, 24, 82, 70, 64, 18, 82, 97, 9] 9 a3 = ['96', '71', '24', '82', '70', '64', '18', '82', '97', '9'] 10 *************** a4数组 *************** 11 a4 = [86, 30, 10, 9, 32, 60, 31, 56, 72, 56] 12 a4 = ['86', '30', '10', '9', '32', '60', '31', '56', '72', '56'] 13 ===== 方法 一,练习水平1 ===== 14 A_Combine = [16, 41, 56, 70, 12, 50, 28, 34, 60, 67, 63, 87, 93, 94, 60, 6, 6, 32, 89, 2, 96, 71, 24, 82, 70, 64, 18, 82, 97, 9, 86, 30, 10, 9, 32, 60, 31, 56, 72, 56] 15 ===== 方法 二,练习水平2, 方法Ok ===== 16 ['16', '41', '56', '70', '12', '50', '28', '34', '60', '67', '63', '87', '93', '94', '60', '6', '6', '32', '89', '2', '96', '71', '24', '82', '70', '64', '18', '82', '97', '9', '86', '30', '10', '9', '32', '60', '31', '56', '72', '56'] 17 ===== 方法 三 ,重复的、低劣===== 18 =====a1函数形式===== 19 A[1] = 16 20 A[2] = 41 21 A[3] = 56 22 A[4] = 70 23 A[5] = 12 24 A[6] = 50 25 A[7] = 28 26 A[8] = 34 27 A[9] = 60 28 A[10] = 67 29 =====a2函数形式===== 30 A[11] = 63 31 A[12] = 87 32 A[13] = 93 33 A[14] = 94 34 A[15] = 60 35 A[16] = 6 36 A[17] = 6 37 A[18] = 32 38 A[19] = 89 39 A[20] = 2 40 =====a3函数形式===== 41 A[21] = 96 42 A[22] = 71 43 A[23] = 24 44 A[24] = 82 45 A[25] = 70 46 A[26] = 64 47 A[27] = 18 48 A[28] = 82 49 A[29] = 97 50 A[30] = 9 51 =====a4函数形式===== 52 A[31] = 86 53 A[32] = 30 54 A[33] = 10 55 A[34] = 9 56 A[35] = 32 57 A[36] = 60 58 A[37] = 31 59 A[38] = 56 60 A[39] = 72 61 A[40] = 56 62 [Finished in 0.3s]
----------------------------------------------------------------------------------------------------------------------------------------------------------------
2021.1.15日,在看一个范例时,本书除了 第5章 Python编程进阶,可稍读下,相对太基础了。
相比起来更喜欢 《Introducing Python_CN_Bill Lubanovic_Python语言及其应用》现已有第2版
用描述式生成同样的表只需要一行代码:rands = [random() for i in range(100000)]
编程时应注意避免在操作中建立大量组合对象。如果发现程序效率低,应该考虑计算中是否构造了大量组合对象,这些构造是否必要.
OnionYang@