字符串被拆分为' list()'而不是在' []'为什么?

时间:2016-07-28 16:36:21

标签: python string list

我一直在一个项目工作,然后我意外 当我传递字符串时发现它们在list()中被分割,但是当我将相同的字符串传递给[ ]时,没有分割成字符串的单个字母。

谁能告诉我这里发生了什么?

>>> y = list("hello")
>>> y
['h', 'e', 'l', 'l', 'o']
>>> z = ["hello"]
>>> z
['hello']

7 个答案:

答案 0 :(得分:3)

因为list constructor将iterable作为参数并从该iterable的项构造一个列表。在您的情况下,它将获取字符串中的每个单独的子字符串,并将它们作为项目使用。

相反,[]是一个替代构造函数,它根据提供的逗号分隔值构造一个列表,不执行其他操作。

通过在方括号内解压缩字符串,您可以在Python 3中使用[]获得类似的结果:

s = "hello"
l = [*s]
print(l) # ['h', 'e', 'l', 'l', 'o']

两个 Python版本中,您可以通过理解获得相同的结果:

l = [char for char in s]

答案 1 :(得分:2)

listbuiltin,它采用可迭代并将其转换为列表。

另一方面,

[]定义列表的语言构造。要使用构造[]获得相同的结果,您可以使用理解:

>>> z = [i for i in "hello"]
>>> z
['h', 'e', 'l', 'l', 'o']

答案 2 :(得分:1)

字符串是可迭代的。 list函数(实际上它是一个类型,但它可以调用)迭代它的参数,使得iterable的每个元素(在你的情况下,字符串的每个字符)都是一个元素。结果清单。

对于任何迭代,这几乎都是一样的。你正在做的是相当于

的字符串
>>> list([1, 2, 3])
[1, 2, 3]
>>> [[1, 2, 3]]
[[1, 2, 3]]

也就是说,在第二种情况下,您会得到一个包含单个可迭代的列表,而在第一种情况下,您会得到一个由可迭代的各个元素组成的列表。

答案 3 :(得分:0)

>>> y = list("hello")中的

你要求python从"hello"构建一个列表,它会删除元素

中的字符串

并在>>> z = ["hello"] 您创建一个包含单个元素hello

的列表

答案 4 :(得分:0)

list()方法根据给定的输入生成一个列表。

带方括号的版本意味着您要创建一个包含一个元素的列表,即您的字符串。因此,它没有被拆分。

答案 5 :(得分:0)

y = list(“你好”) list()是一个内置函数,它接受一个可迭代的“返回一个列表,其项目与iterable的项目相同且顺序相同”(参见https://docs.python.org/2/library/functions.html#list)。

z = [“你好”] 这只是一个包含单个元素(字符串类型)的列表。

答案 6 :(得分:0)

在你的第一个例子中;

>>> y = list("hello")

你正在施放一个字符串"你好"到列表

在第二个例子中;

>>> z = ["hello"]

您正在创建一个数组(列表),其中包含一个项目,其中包含内容"您好"