I was doing some coding exercises and I ended up using a set
of frozenset
s.
Here is the code:
cities = 4
roads = [[0, 1], [1, 2], [2, 0]]
roads = set([frozenset(road) for road in roads])
output = []
for i in range(cities-1):
for j in range(i+1, cities):
if set([i,j]) not in roads:
output.append([i,j])
As you can see, the if
in the nested for
tests for the presence of the set in the set of sets.
However, it was my understanding that in this case, hashables need to be used with the in
operator.
If I replace set([i,j])
with [i,j]
, I do get the following error:
TypeError: unhashable type: 'list'
So, here is my question: why does it work with the set, which is not (as far as I know) hashable and not with the list? Should it not also throw an error, what am I missing?
When used with two SELECT statements, the UNION set operator returns the results of both queries. However,if there are any duplicates, they are removed, and the duplicated record is listed only once.To include duplicates in the results,use the UNION ALL set operator.
Set operators are used to join the results of two (or more) SELECT statements. The SET operators available in Oracle 11g are UNION,UNION ALL,INTERSECT,and MINUS.
A set is an unordered collection of items. Every set element is unique (no duplicates) and must be immutable (cannot be changed).
The SET operator allows the tables of a database to be treated as objects in a set when performing a query. In mathematics, the various operations on sets using mathematical operators, must act on at least two different sets to produce results. Naturally, when applied to databases, SET operations must work on two...
Sets and frozensets support the following operators: key in s: It is used to check that the given key is in the set or not. key not in s: it returns True if the key is not in the set.
The mathematical concept of a set applies to SQL databases too. All SQL implementations are able to treat tables as sets and to apply SET operators on them. Similarities between sets and tables and how SET operators act on tables will be discussed. Updated: 01/23/2020 What is the SET Operator?
Operators covered under SET operators are: There are certain rules which must be followed to perform operations using SET operators in SQL. Rules are as follows: The number and order of columns must be the same. Data types must be compatible.
From my reading of the CPython source it appears that the test for contains
checks if the key is found in the set; if not, and if the key is a set
object, an attempt is made to convert the key to a frozenset
, and then that key is tested. The same behavior exists for operations like remove
, as seen here:
>>> s = set([frozenset([1,2])])
>>> s
{frozenset({1, 2})}
>>> s.remove(set([1,2]))
>>> s
set()
The code in question in the interpreter is the set_contains()
function in Objects/setobject.c
.
Nevermind, found the answer in the documentation, for anyone wondering:
Note, the elem argument to the __contains__()
, remove()
, and discard()
methods may be a set. To support searching for an equivalent frozenset, a temporary one is created from elem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With