Python元组而不是列表

时间:2013-09-20 22:23:08

标签: python list python-3.x tuples list-comprehension

我读了一些关于Python的技巧,并且遇到了以下代码。我混淆了为什么代码用列表中列出的两个元素创建元组。 为什么python在列表中返回元组而不是列表中的列表?是否与元组不可变有关? 提前谢谢。

>>>import os, glob
>>>[(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.sh')]
[(3074, '/home/usr1/a.sh'),
(3386, '/home/usr1/b.sh'),
(3070, '/home/usr1/c.sh')]

3 个答案:

答案 0 :(得分:8)

代码显式生成元组:

(os.stat(f).st_size, os.path.realpath(f))

这是生成的每个列表元素的2值元组。列表理解可以重写为:

result = []
for f in glob.glob('*.sh'):
    item = (os.stat(f).st_size, os.path.realpath(f))
    result.append(item)

如果要生成嵌套列表,请用括号替换括号:

[[os.stat(f).st_size, os.path.realpath(f)] for f in glob.glob('*.sh')]

答案 1 :(得分:2)

通过用逗号分隔项目,在Python中创建一个元组:

>>> 1,2,3
(1, 2, 3)
>>> x = 1,2,3
>>> x
(1, 2, 3)

当使用像你一样的列表理解以及其他情况时,你必须给出关于你正在尝试创建一个元组的事实的python提示(并且它也倾向于帮助其他开发者,这总是一个好的事情)。正如Martijin所指出的那样 - (os.stat(f).st_size, os.path.realpath(f))正在创造一个元组。

>>>[(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.sh')]
    ^                  ^.                   ^
    |                    \_ this makes      |
    \__________________     it a tuple      |
                       \____________________\___ These are how Python knows to
that the comma makes it a tuple - they group that piece of code toegether.

你可以把任何东西都放在那里......

  • 将其列为清单:[[os.stat(f).st_size, os.path.realpath(f)] for f in glob.glob('*.sh')]
  • 怎么样? [None for f in glob.glob('*.sh')]
  • 让我们向后取名:[f[::1] for f in glob.glob('*.sh')]

This是一个非常先进的资源,可以讨论列表推导和生成器等可能有趣的读取。

答案 2 :(得分:1)

(a,b)是一个元组。 [(a,b)]是一个元组列表。