python列表语法

时间:2012-03-24 12:09:32

标签: python list

def bucketsort(arr, k):
    counts = [0] * k
    for x in arr:
        counts[x] += 1
    sorted_arr = []
    for i, count in enumerate(counts):
        sorted_arr.extend([i] * count)
    return sorted_arr

有人可以解释一下这种语法吗?

1)

  counts = [0] * k

2)  

中的for i, count
  for i, count in enumerate(counts):
        sorted_arr.extend([i] * count)

在python中只有列表和词典?没有array \ queues \ stack?

3 个答案:

答案 0 :(得分:3)

[0] * k

评估为包含k元素的列表,每个元素为0

[i] * count

评估为包含count元素的列表,每个元素为i

文档的相关部分位于:Sequence Types

for i, count in enumerate(counts):

enumerate函数返回一个产生元组的迭代器。每个元组都包含一个索引以及counts中的关联项。所以你的代码相当于:

i = 0
for count in counts:
    #do something with i and count
    i += 1

答案 1 :(得分:1)

序列类型和乘法

[0]*k

这意味着包含k - s的尺寸0的列表。这适用于任何序列对象,例如:

"foo"*2

对列表进行迭代

请考虑以下语法:

for i, value in enumerate(values):
    pass

这利用了Python的两个属性。第一种是for语法,在某些其他语言中的作用类似于foreach。例如,以下内容将循环3次,i第一次为0,第二次为1,第三次为2

for i in [0,1,2]:
    pass

第二个是价值拆包。给定序列类型,您可以将其值解包为不同的变量:

i, j = (42, 69, )

运行此行后,i将保留42j将保留69。顺便说一下,这是一个元组,它是一个不可变的(即你不能改变它)序列。

最后,函数enumerate接受一个序列并返回一个元组序列,其中第一个元素是索引号,第二个元素是该索引处的序列值。好吧,确切地说,它需要一个可顺序的对象并返回一个迭代器,但差别相同。

所以,基本上,通过使用该语法,您可以获得索引和值。好的。

Python中的内置序列类型

您有一个列表([1, "fish", 2, "fish", "red", "fish", "blue", "fish"]),一个dict({'one': 2, 2: 'three'}),一个元组((one, [1,2], three, ))和一个集合({"one", 3, (1,2)},Python 2.7语法)。你也有一个冷冻集,它是一个不可变的集合,没有语法糖。

请参阅Python documentation for built-in types

然后标准collections package中还有一些容器类型。还有一些data types in other places in the standard library

此外,您可以将标准列表用作堆栈或队列。并且不要让array包欺骗你 - 你不使用它来实现数组(你使用普通列表),你用它来导入二进制数据。它是struct包的伴侣。

答案 2 :(得分:0)

Python有arraysqueues等等的类(除了好的和可谷歌的文档之外)。您还可以将列表用作queuesstacks