Python 创建长度为M的N个数组,其中每个数组上的序列增加1
早上好 给定两个数字(a,b),我应该创建一个长度为“b”的不同列表,其中每个列表的顺序增加一 例如: 1,2=>Python 创建长度为M的N个数组,其中每个数组上的序列增加1,python,arrays,Python,Arrays,早上好 给定两个数字(a,b),我应该创建一个长度为“b”的不同列表,其中每个列表的顺序增加一 例如: 1,2=>[[0,1]] 2,2=>[[0,1],[1,2]] 我正在尝试编写以下函数: def increase_arrays(arrays, length): result = [[i for i in range(length)] for i in range(arrays)] return result increase_arrays(2,3) => [[0,
[[0,1]]
2,2=>[[0,1],[1,2]]
我正在尝试编写以下函数:
def increase_arrays(arrays, length):
result = [[i for i in range(length)] for i in range(arrays)]
return result
increase_arrays(2,3)
=> [[0, 1, 2], [0, 1, 2]]
我看不到如何修改代码,因此第二个数组是[1,2,3]
。
有人能帮忙解决这个问题吗?您有著名的重复索引问题,您有两个索引
i
以下是您需要的代码:
def increase_arrays(arrays, length):
result = [[i + j for i in range(length)] for j in range(arrays)]
return result
increase\u数组(2,3)
返回[[0,1,2],[1,2,3]]
您有著名的重复索引问题,您有两个索引i
以下是您需要的代码:
def increase_arrays(arrays, length):
result = [[i + j for i in range(length)] for j in range(arrays)]
return result
increase\u数组(2,3)
返回[[0,1,2],[1,2,3]]
我终于用以下方法解决了这个问题:
def increase_arrays(arrays, length):
return [list(range(i,length+i)) for i in range(arrays)]
我终于用以下方法解决了这个问题:
def increase_arrays(arrays, length):
return [list(range(i,length+i)) for i in range(arrays)]
这里有一个numpy解决方案,只是为了好玩:
np.arange(arrays)[:,np.newaxis] + np.arange(length)[np.newaxis,:]
这里有一个numpy解决方案,只是为了好玩:
np.arange(arrays)[:,np.newaxis] + np.arange(length)[np.newaxis,:]
这是解决方案,但它的可读性比以前的代码低得多。加上取决于您如何使用它,这可能会更慢,因为转换到
列表
在长距离上是非常昂贵的操作。@Dmytro。是否意味着转换已知长度的序列将比转换等效的生成器表达式慢?也就是说,列表(范围(…))
将比[x+y代表范围(…)内的x]
慢?“因为我不认为那是对的。”物理学家说,那是我的错。您是对的,list(range(…)
将比list理解更快。我用不同的python进行了测试,但我仍然认为最初的代码更具可读性。目前,如果我在几个月后看到函数,我不确定是否需要1秒的时间才能弄清楚代码的作用,即使它是一行代码。@Dmytro。我认为好的变量名将大大缓解这种情况。例如,i
->offset
这是解决方案,但它的可读性比以前的代码低得多。加上取决于您如何使用它,这可能会更慢,因为转换到列表
在长距离上是非常昂贵的操作。@Dmytro。是否意味着转换已知长度的序列将比转换等效的生成器表达式慢?也就是说,列表(范围(…))
将比[x+y代表范围(…)内的x]
慢?“因为我不认为那是对的。”物理学家说,那是我的错。您是对的,list(range(…)
将比list理解更快。我用不同的python进行了测试,但我仍然认为最初的代码更具可读性。目前,如果我在几个月后看到函数,我不确定是否需要1秒的时间才能弄清楚代码的作用,即使它是一行代码。@Dmytro。我认为好的变量名将大大缓解这种情况。例如,i
->偏移量