def transpose(matrix):
n=0
while n < (len(matrix)):
li = []
for sets in matrix:
li.append(sets[0])
n += 1
print(len(matrix))
return li
transpose([[1,2,3],[4,5,6],[7,8,9]])
目前返回[1,4,7] 通缉结果[[1,4,7],[2,5,8],[3,6,9]]
答案 0 :(得分:6)
你的while中有一个return
语句,所以函数一旦到达那个点就会返回。您应该 dedent 返回与while相同的级别:
def transpose(matrix):
n = 0
li = []
while n < (len(matrix)):
...
return li
您还可以使用在n
上迭代的for循环替换while循环和计数器range(len(matrix))
,这样您就可以安全地丢弃n
,然后移动li
的初始化在循环之外:
def transpose(matrix):
li = []
for i in range(len(matrix)):
inner_li = []
for sets in matrix:
inner_li.append(sets[i])
li.append(inner_li)
return li
我建议您采用流行的配方来转置矩阵,以使代码更清晰:
def transpose(matrix):
return list(zip(*matrix))
>>> transpose([[1,2,3],[4,5,6],[7,8,9]])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
答案 1 :(得分:1)
缩进很重要。另外,列表li
正在错误的位置进行初始化。
def transpose(matrix):
n=0
li = []
while n < (len(matrix)):
for sets in matrix:
li.append(sets[0])
n += 1
print(len(matrix))
return li
答案 2 :(得分:1)
我想你知道这一点,但为了以防万一,这可以用numpy
完成import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print A.T
答案 3 :(得分:0)
你的第一个错误是缩进class WishListsCell: UITableViewCell {
var collectionView: UICollectionView!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: screenWidth, height: (screenWidth / 4))
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
layout.estimatedItemSize.height = (screenWidth / 4)
layout.estimatedItemSize.width = screenWidth
collectionView = UICollectionView(frame: contentView.frame, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.register(WishListsCollectionViewCell.self, forCellWithReuseIdentifier: cellId)
self.contentView.addSubview(collectionView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension WishListsCell: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
let items = wishListUrls[section]
debugPrint("number of items in section: \(items.count)")
return items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! WishListsCollectionViewCell
debugPrint("cell for item at \(indexPath)")
debugPrint("indexPath.section: \(indexPath.section)")
debugPrint("indexPath.row: \(indexPath.row)")
if let imageUrl = wishListUrls[indexPath.section][indexPath.row] as String! {
debugPrint(imageUrl)
。
第二个是在return
内0
代替n
。
第三个是在每个while循环中覆盖li的值。
这是它的工作原理:
sets[...]
不要担心。如果你好奇并尝试一下,你会变得更快,更不容易出错:)