我有一个数字列表,我想从列表中创建行和列。 我可以强制它,并在Python 2.7中执行以下操作。
l = [1,2,3,4,5,6,7,8,9]
r1 = [l[0], l[1], l[2]]
r2 = [l[3], l[4], l[5]]
r3 = [l[6], l[7], l[8]]
c1 = [l[0], l[3], l[6]]
但我似乎无法在python中创建一个函数来使其工作。我的语法错了吗?
def make_row(r, li, arg1, arg2, arg3):
r = [li[arg1], li[arg2], li[arg3]]
make_row(r1, l, 0, 1, 2)
make_row(r2, l, 3, 4, 5)
make_row(r3, l, 6, 7, 8)
有谁能告诉我我做错了什么? make_row
函数似乎无法正常工作。
答案 0 :(得分:2)
您的错误是how Python passes arguments中的误解。函数r
中的make_row
只是一个名称。分配到它时,它只是将该名称指向新的东西,在函数的上下文中,将旧对象和函数外的旧名称保持不变。
如果您返回make_row
的结果,您可以看到它生成正确的输出,它只是不会像您想象的那样将其保存到变量中。
这将返回行:
的列表[l[i:i+3] for i in xrange(0, len(l), 3)]
这相当于列:
[l[i::3] for i in xrange(0, 3)]
如果您想要不同长度的行/列,只需用这些数字代替这些语句中的3&#39。
答案 1 :(得分:0)
你的函数make_row
尽我所知(我还没有测试过),但你需要return r
。
答案 2 :(得分:0)
好吧我想我想出了自己的问题。代码应如下所示。
def make_row(li, arg1, arg2, arg3):
r = [li[arg1], li[arg2], li[arg3]]
return r
row1 = make_row(li, 0, 1, 2)