我对python有疑问。 我有一个函数,它将一组3D点作为输入。 通常,如果我做这样的事情,它可以正常工作:
<div class="container">
<img src="http://lorempixel.com/300/800/sports/1/">
</div>
问题是我想动态生成元组“MyPoints”(即带有for循环)。例如:
MyPoints=([0,0,0],[1,1,1],[2,2,2])
myfunction(MyPoints)
问题是上面的代码在调用函数时发送错误。它告诉我,我有“太多的论点”。
所以我的问题很简单:我如何构造一个形式的元组: MyPoints =([0,0,0],[1,1,1],[2,2,2],[3,3,3])(等)
使用for循环?
提前感谢您的帮助和时间。
编辑: 感谢所有的回应,但我确实没有任何作用,但这是我的错。真对不起。接受的onlz szntax如下:
MyPoints=([0,0,0])
for k in range(1,11)
MyPoints=MyPoints+tuple([k,k,k])
myfunction(MyPoints)
有谁知道如何使用循环构建这样的结构? 再次感谢并为此感到抱歉!
最佳, 朱莉娅
答案 0 :(得分:1)
当您实际打算创建包含列表的单例元组时,您正在将列表转换为元组:
你在做什么:
>>> tuple([1,1,1])
(1, 1, 1)
你想要什么:
>>> ([1,1,1],)
([1, 1, 1],)
mypoints=([0,0,0],) # notice the ,
...
mypoints = mypoints + ([k,k,k],)
答案 1 :(得分:1)
我建议使用列表理解来制作一个点列表:
myPoints=[((i,i,i),) for i in range(4)]
如果你想把它作为一个元组:
myPoints=tuple([((i,i,i),) for i in range(4)])
答案 2 :(得分:1)
也许这会有所帮助:
>>> import random
>>> a = tuple([random.choice([i for i in range(1,11)]) for j in range(3)] for v in range(3))
>>> a
([10, 5, 4], [4, 6, 6], [10, 4, 6])
答案 3 :(得分:0)
有点无关(摩西的回答在技术上是正确的),但你实际上应该使用元组列表,而不是列表元组。
元组是固定大小的异质集合,其中位置是显着的(每个项目的位置具有给定的含义)。典型示例是点(如示例中point[0]
是x
坐标,point[1]
y
和point[2]
z
),csv文件或关系数据库行(通常是表格数据)等。您实际上可以将元组视为dict,其中键只是整数...
列表是可变大小的同类集合,其中位置没有意义。规范示例是一组点,一组表格数据(即来自csv文件的所有行或来自关系数据库查询的所有行)等。
在你的代码中,你有一组3D点&#34;所以&#34;设置&#34; =&GT; list'
,3D point
=&gt; tuple
。
作为奖励,构建元组列表比构建列表元组(python 2.7.6)更快:
bruno@bigb:~/Work/playground$ cat pointlist.py
def test1(max=100):
points = ()
for i in xrange(1, max):
points += ([i, i, i],)
return points
def test2(max=100):
points = []
for i in xrange(1, max):
points.append((i, i, i))
return points
def test3(max=100):
points = [(i, i, i) for i in xrange(1, max)]
return points
import timeit
for i in (1, 2, 3):
fun = "test%s" % i
print "%s : " % fun
print timeit.timeit("fun()", "from __main__ import %s as fun" % fun, number=10000)
print
bruno@bigb:~/Work/playground$ python pointlist.py
test1 :
0.0343580245972
test2 :
0.0103368759155
test3 :
0.00669503211975