O tipo de conjunto integrado. Um conjunto é uma coleção mutável e iterável de valores exclusivos, ou seja, os
elementos do conjunto. O nome do tipo de um conjunto é "set"
.
Os conjuntos fornecem operações de tempo constante para inserir, remover ou verificar a presença de um valor. Os conjuntos são implementados usando uma tabela de hash e, portanto, assim como as chaves de um dicionário, os elementos de um conjunto precisam ser hasháveis. Um valor só pode ser usado como um elemento de um conjunto se puder ser usado como uma chave de um dicionário.
Os conjuntos podem ser construídos usando a função integrada
set()
, que retorna um novo conjunto contendo os elementos únicos do argumento opcional, que
precisa ser iterável. Chamar set()
sem um argumento cria um conjunto vazio. Os conjuntos
não têm sintaxe literal.
As operações in
e not in
verificam se um valor está (ou não) em um
conjunto:
s = set(["a", "b", "c"]) "a" in s # True "z" in s # False
Um conjunto é iterável e, portanto, pode ser usado como o operando de um loop for
, uma compreensão
de lista e as várias funções integradas que operam em iteráveis. O comprimento dele pode ser
recuperado usando a função integrada len()
, e a
ordem de iteração é a ordem em que os elementos foram adicionados ao conjunto:
s = set(["z", "y", "z", "y"]) len(s) # prints 2 s.add("x") len(s) # prints 3 for e in s: print e # prints "z", "y", "x"
Um conjunto usado no contexto booleano é verdadeiro se e somente se não estiver vazio.
s = set() "non-empty" if s else "empty" # "empty" t = set(["x", "y"]) "non-empty" if t else "empty" # "non-empty"
Os conjuntos podem ser comparados para igualdade ou desigualdade usando ==
e !=
. Um conjunto
s
é igual a t
se e somente se t
for um conjunto que contém os mesmos
elementos. A ordem de iteração não é significativa. Em particular, um conjunto não é igual à lista
dos elementos dele. Os conjuntos não são ordenados em relação a outros conjuntos, e uma tentativa de comparar dois conjuntos
usando <
, <=
, >
, >=
ou classificar uma
sequência de conjuntos vai falhar.
set() == set() # True set() != [] # True set([1, 2]) == set([2, 1]) # True set([1, 2]) != [1, 2] # True
A operação |
em dois conjuntos retorna a união dos dois conjuntos: um conjunto contendo os
elementos encontrados em um ou ambos os conjuntos originais.
set([1, 2]) | set([3, 2]) # set([1, 2, 3])
A operação &
em dois conjuntos retorna a interseção dos dois conjuntos: um conjunto
que contém apenas os elementos encontrados nos dois conjuntos originais.
set([1, 2]) & set([2, 3]) # set([2]) set([1, 2]) & set([3, 4]) # set()
A operação -
em dois conjuntos retorna a diferença entre os dois conjuntos: um conjunto contendo
os elementos encontrados no conjunto do lado esquerdo, mas não no conjunto do lado direito.
set([1, 2]) - set([2, 3]) # set([1]) set([1, 2]) - set([3, 4]) # set([1, 2])
A operação ^
em dois conjuntos retorna a diferença simétrica dos dois conjuntos: um conjunto
que contém os elementos encontrados em exatamente um dos dois conjuntos originais, mas não em ambos.
set([1, 2]) ^ set([2, 3]) # set([1, 3]) set([1, 2]) ^ set([3, 4]) # set([1, 2, 3, 4])
Em cada uma das operações acima, os elementos do conjunto resultante mantêm a ordem dos dois conjuntos de operandos, com todos os elementos extraídos do lado esquerdo ordenados antes de qualquer elemento que estivesse presente apenas no lado direito.
As atribuições aumentadas correspondentes, |=
, &=
, -=
e ^=
, modificam o conjunto à esquerda.
s = set([1, 2]) s |= set([2, 3, 4]) # s now equals set([1, 2, 3, 4]) s &= set([0, 1, 2, 3]) # s now equals set([1, 2, 3]) s -= set([0, 1]) # s now equals set([2, 3]) s ^= set([3, 4]) # s now equals set([2, 4])
Como todos os valores mutáveis no Starlark, um conjunto pode ser congelado. Depois de congelado, todas as operações subsequentes que tentarem atualizá-lo vão falhar.
Membros
- adicionar
- clear
- diferença
- difference_update
- descartar
- interseção
- intersection_update
- isdisjoint
- issubset
- issuperset
- pop
- remover
- symmetric_difference
- symmetric_difference_update
- union
- update
adicionar
None
set.add(element)
É permitido add
um valor já presente no conjunto. Isso deixa o conjunto
inalterado.
Se você precisar adicionar vários elementos a um conjunto, consulte update
ou
a operação de atribuição aprimorada |=
.
Parâmetros
Parâmetro | Descrição |
---|---|
element
|
elemento obrigatório Elemento a ser adicionado. |
limpar
None
set.clear()
diferença
set set.difference(*others)
Se s
e t
forem conjuntos, s.difference(t)
será equivalente a
s - t
. No entanto, a operação -
exige que ambos os lados sejam conjuntos,
enquanto o método difference
também aceita sequências e dicionários.
É permitido chamar difference
sem argumentos. Isso retorna uma cópia do
conjunto.
Por exemplo,
set([1, 2, 3]).difference([2]) # set([1, 3]) set([1, 2, 3]).difference([0, 1], [3, 4]) # set([2])
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |
difference_update
None
set.difference_update(*others)
Se s
e t
forem conjuntos, s.difference_update(t)
será equivalente
a s -= t
. No entanto, a atribuição aprimorada de -=
exige que ambos
os lados sejam conjuntos, enquanto o método difference_update
também aceita sequências e dicionários.
É permitido chamar difference_update
sem argumentos. Isso deixa o
conjunto inalterado.
Por exemplo,
s = set([1, 2, 3, 4]) s.difference_update([2]) # None; s is set([1, 3, 4]) s.difference_update([0, 1], [4, 5]) # None; s is set([3])
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |
descartar
None
set.discard(element)
É permitido discard
um valor que não está presente no conjunto. Isso deixa o conjunto
inalterado. Se você quiser falhar em uma tentativa de remover um elemento ausente, use
remove
. Se você precisar remover vários elementos de um
conjunto, consulte difference_update
ou a operação de atribuição
ampliada -=
.
Por exemplo,
s = set(["x", "y"]) s.discard("y") # None; s == set(["x"]) s.discard("y") # None; s == set(["x"])
Parâmetros
Parâmetro | Descrição |
---|---|
element
|
required Elemento a ser descartado. Precisa ser hashável. |
intersecção
set set.intersection(*others)
Se s
e t
forem conjuntos, s.intersection(t)
será equivalente a
s & t
. No entanto, observe que a operação &
exige que ambos os lados
sejam conjuntos, enquanto o método intersection
também aceita sequências e dicionários.
É permitido chamar intersection
sem argumentos. Isso retorna uma cópia do
conjunto.
Por exemplo,
set([1, 2]).intersection([2, 3]) # set([2]) set([1, 2, 3]).intersection([0, 1], [1, 2]) # set([1])
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |
intersection_update
None
set.intersection_update(*others)
Se s
e t
forem conjuntos, s.intersection_update(t)
será
equivalente a s &= t
. No entanto, a atribuição aprimorada de &=
exige que ambos os lados sejam conjuntos, enquanto o método intersection_update
também
aceita sequências e dicionários.
É permitido chamar intersection_update
sem argumentos. Isso deixa o
conjunto inalterado.
Por exemplo,
s = set([1, 2, 3, 4]) s.intersection_update([0, 1, 2]) # None; s is set([1, 2]) s.intersection_update([0, 1], [1, 2]) # None; s is set([1])
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |
isdisjoint
bool set.isdisjoint(other)
Por exemplo,
set([1, 2]).isdisjoint([3, 4]) # True set().isdisjoint(set()) # True set([1, 2]).isdisjoint([2, 3]) # False
Parâmetros
Parâmetro | Descrição |
---|---|
other
|
required Um conjunto, uma sequência de elementos hasháveis ou um dicionário. |
issubset
bool set.issubset(other)
Um conjunto é sempre considerado um subconjunto de si mesmo.
Por exemplo,
set([1, 2]).issubset([1, 2, 3]) # True set([1, 2]).issubset([1, 2]) # True set([1, 2]).issubset([2, 3]) # False
Parâmetros
Parâmetro | Descrição |
---|---|
other
|
required Um conjunto, uma sequência de elementos hasháveis ou um dicionário. |
issuperset
bool set.issuperset(other)
Um conjunto é sempre considerado um superconjunto de si mesmo.
Por exemplo,
set([1, 2, 3]).issuperset([1, 2]) # True set([1, 2, 3]).issuperset([1, 2, 3]) # True set([1, 2, 3]).issuperset([2, 3, 4]) # False
Parâmetros
Parâmetro | Descrição |
---|---|
other
|
required Um conjunto, uma sequência de elementos hasháveis ou um dicionário. |
pop
unknown set.pop()
Falha se o conjunto estiver vazio.
Por exemplo,
s = set([3, 1, 2]) s.pop() # 3; s == set([1, 2]) s.pop() # 1; s == set([2]) s.pop() # 2; s == set() s.pop() # error: empty set
remover
None
set.remove(element)
remove
falha se o elemento não estiver presente no conjunto. Se você não quiser falhar em
uma tentativa de remover um elemento ausente, use discard
.
Se você precisar remover vários elementos de um conjunto, consulte
difference_update
ou a operação de atribuição
ampliada -=
.
Parâmetros
Parâmetro | Descrição |
---|---|
element
|
required Elemento a ser removido. Precisa ser um elemento do conjunto (e hashável). |
symmetric_difference
set set.symmetric_difference(other)
Se s
e t
forem conjuntos, s.symmetric_difference(t)
será
equivalente a s ^ t
. No entanto, observe que a operação ^
exige que ambos
os lados sejam conjuntos, enquanto o método symmetric_difference
também aceita uma sequência ou um
dicionário.
Por exemplo,
set([1, 2]).symmetric_difference([2, 3]) # set([1, 3])
Parâmetros
Parâmetro | Descrição |
---|---|
other
|
required Um conjunto, uma sequência de elementos hasháveis ou um dicionário. |
symmetric_difference_update
None
set.symmetric_difference_update(other)
Se s
e t
forem conjuntos, s.symmetric_difference_update(t)
será
equivalente a "s ^= t; however, note that the
^=`". A atribuição aprimorada exige que ambos
os lados sejam conjuntos, enquanto o método symmetric_difference_update
também aceita uma sequência
ou um dicionário.
Por exemplo,
s = set([1, 2]) s.symmetric_difference_update([2, 3]) # None; s == set([1, 3])
Parâmetros
Parâmetro | Descrição |
---|---|
other
|
required Um conjunto, uma sequência de elementos hasháveis ou um dicionário. |
união
set set.union(*others)
Se s
e t
forem conjuntos, s.union(t)
será equivalente a
s | t
. No entanto, a operação |
exige que ambos os lados sejam conjuntos,
enquanto o método union
também aceita sequências e dicionários.
É permitido chamar union
sem argumentos. Isso retorna uma cópia do
conjunto.
Por exemplo,
set([1, 2]).union([2, 3]) # set([1, 2, 3]) set([1, 2]).union([2, 3], {3: "a", 4: "b"}) # set([1, 2, 3, 4])
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |
update
None
set.update(*others)
Por exemplo,
s = set() s.update([1, 2]) # None; s is set([1, 2]) s.update([2, 3], [3, 4]) # None; s is set([1, 2, 3, 4])
Se s
e t
forem conjuntos, s.update(t)
será equivalente a
s |= t
. No entanto, a atribuição aumentada |=
exige que ambos os lados
sejam conjuntos, enquanto o método update
também aceita sequências e dicionários.
É permitido chamar update
sem argumentos. Isso deixa o conjunto
inalterado.
Parâmetros
Parâmetro | Descrição |
---|---|
others
|
required Conj., sequências de elementos hasháveis ou dicionários. |