关于是否返回迭代器的问题

img


为什么上面的元组要用tuple才行,否则就会是一串代码,而下面的列表可以不用转换,直接就是列表形式?

这是由于括号的缘故(),括号包裹起来就会自动生成为一个generator 对象,而元组就是使用括号包裹起来的,所以是一个generator ,而列表不是。你可以试试在生成列表时加一个括号看看:t1 = [(random.randint(10,99) for i in range(6))],把里面的东西用括号包起来就是生成一个generator

下面的是列表推导式,生成的直接是个列表类型
而元组是不可更改的,所以根本没有元组推导式,生成的是个genexpr类型

  • 这篇博客: 元组(tuple)的常用操作中的 列表和元祖的区别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 元组和列表都属于序列,而且它们又都可以按照特定顺序存放一组元素,类型又不受限制,只要是Python支持的类型都可以

    主要区别体现在:

    • 列表属于可变序列,它的元素可以随时修改或者删除,元组属于不可变序列,其中的元素不可以修改,除非整体替换
    • 列表可以使用append()、extend()、insert()、remove()、pop()等方法实现添加和修改列表元素,而元组没有这几个方法,所以不能向元组中添加和修改元素。同样,元组也不能删除元素
    • 列表可以使用切片访问和修改列表中的元素,元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改
    • 元组比列表的访问和处理速度快,所以当只是需要对其中的元素进行访问,而不进行修改的时候,建议使用元组
    • 列表不能作为字典的键,而元组可以