我正在尝试打印以下图案:
var selectedArr = [Int]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForRow(at:indexPath) as! EventItemCollectionViewCell
if !selectedArr.contains(indexPath.item) {
cell.imageCheck.image = UIImage(named: "success-1")
self.selectedArr.append(indexPath.row)
} else {
cell.imageCheck.image = UIImage(named: "success-2")
self.selectedArr.remove(where:{ $0 == indexPath.item })
}
}
}
我的python代码是:
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3
但是我遇到以下错误:
def pattern(n):
d = n + (n - 1)
l = [[0 for row in range(d)] for col in range(d)]
for a in range(0, n):
for i in range(a, d):
for j in range(a, d):
l[a][i][j].append(n)
d -= 1
n -= 1
print(pattern(3))
有人可以指导我如何克服这个问题吗?
谢谢。
答案 0 :(得分:4)
由于很难理解您的代码应该如何执行(抱歉!),因此,这是一种非常Python化的方式来生成像这样的矩阵作为生成器函数。
def pattern(n):
size = n * 2 - 1
n_1 = n - 1
for y in range(size):
yield [max(abs(x - n_1), abs(y - n_1)) + 1 for x in range(size)]
这个想法是,我们查看从n - 1
生成的像元的“距离”,该距离必须是网格的中心点(n * 2 - 1
个项目宽而高)
由于它是一个生成器函数,因此您可以通过调用以下命令获取列表列表: list(pattern(size))
。
这是一个示例程序–
for size in range(1, 6):
print(size)
for row in pattern(size):
print(row)
–及其输出:
1
[1]
2
[2, 2, 2]
[2, 1, 2]
[2, 2, 2]
3
[3, 3, 3, 3, 3]
[3, 2, 2, 2, 3]
[3, 2, 1, 2, 3]
[3, 2, 2, 2, 3]
[3, 3, 3, 3, 3]
4
[4, 4, 4, 4, 4, 4, 4]
[4, 3, 3, 3, 3, 3, 4]
[4, 3, 2, 2, 2, 3, 4]
[4, 3, 2, 1, 2, 3, 4]
[4, 3, 2, 2, 2, 3, 4]
[4, 3, 3, 3, 3, 3, 4]
[4, 4, 4, 4, 4, 4, 4]
5
[5, 5, 5, 5, 5, 5, 5, 5, 5]
[5, 4, 4, 4, 4, 4, 4, 4, 5]
[5, 4, 3, 3, 3, 3, 3, 4, 5]
[5, 4, 3, 2, 2, 2, 3, 4, 5]
[5, 4, 3, 2, 1, 2, 3, 4, 5]
[5, 4, 3, 2, 2, 2, 3, 4, 5]
[5, 4, 3, 3, 3, 3, 3, 4, 5]
[5, 4, 4, 4, 4, 4, 4, 4, 5]
[5, 5, 5, 5, 5, 5, 5, 5, 5]
编辑:根据注释的要求,这是一个简化版本,它不是生成器函数,并且不使用列表推导:
def pattern_simple(n):
size = n * 2 - 1
n_1 = n - 1
rows = []
for y in range(size):
row = []
for x in range(size):
row.append(max(abs(x - n_1), abs(y - n_1)) + 1)
rows.append(row)
return rows
答案 1 :(得分:1)
即使答案有点晚,也可以从您自己的代码开始...
您的代码尝试建立一个0数组,然后将递减值写入子数组。只是您错误地复制了它。应该是:
def pattern(n):
d = n + (n - 1)
l = [[0 for row in range(d)] for col in range(d)]
for a in range(0, n):
for i in range(a, d):
for j in range(a, d):
l[i][j]=n
n -= 1
d -= 1
return l