1、转置矩阵的实现方法:
#矩阵的转置 jz=[[1,2,3],[4,5,6],[7,8,9]] print(jz) for i,row in enumerate(jz): for j,col in enumerate(row): if i<j: jz[i][j],jz[j][i]=jz[j][i],jz[i][j] print(jz)
#enumerate的用法:
语法:enumerate(sequence, [start=0])
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
实例:
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
另一种实现方法:
#矩阵的转置 jz=[[1,2,3],[4,5,6],[7,8,9]] print(jz) for i in range(len(jz)): for j in range(i): jz[i][j],jz[j][i]=jz[j][i],jz[i][j] print(jz)
不规则矩阵转置的实现:
#不规则长矩阵的转置 jz=[[1,2,3],[4,5,6]] print(jz) t=[] for row in jz: for i,col in enumerate(row): if len(t)<i+1: #jz有几列t就要添加多少行 t.append([]) t[i].append(col) print(t)
2、随机产生10个数字(不大于21),统计重复的数字有几个,分别是什么;统计不重复的数字有几个,分别是什么:
import random nums=[] for _ in range(10): nums.append(random.randrange(21)) print(nums) s,d=[],[] #分别用来装相同的那几个数字和不同的那几个数字 lenth=len(nums) state=[0]*lenth #用来做标记,标记以及重复的数字的位置 for i in range(lenth): #第一层循环对每一个元素进行遍历 flag=False #每一个元素比较前都要重新给flag赋初值 if state[i]==1: #如果第i个元素已经重复了,则不用比较了,这取决于后面的state[j]=1和state[i]=1 continue for j in range(i+1,lenth): #对i后面的每一个元素都要于i位置的元素进行比较 if state[j]==1: continue if nums[i]==nums[j]: flag=True #重复了,给flag赋值为True,并标记state该位置为1 state[j]=1 if flag: s.append(nums[i]) state[i]=1 else: d.append(nums[i]) print("same Array={0} has {1}".format(s,len(s))) print("different Array={0} has {1}".format(d,len(d)))
结果:
[14, 3, 9, 12, 7, 9, 11, 17, 11, 17] same Array=[9, 11, 17] has 3 different Array=[14, 3, 12, 7] has 4