使用for循环构造列表元组

时间:2017-04-07 10:14:49

标签: python tuples

我对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)

有谁知道如何使用循环构建这样的结构? 再次感谢并为此感到抱歉!

最佳, 朱莉娅

4 个答案:

答案 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] ypoint[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