1 of 39

TUPLES

S.Madhumalar

Assistant Professor

C.P.A College, Bodinayakanur

2 of 39

Tuples

  • Same as lists but
    • Immutable
    • Enclosed in parentheses
    • A tuple with a single element must have a comma inside the parentheses:
      • a = (11,)

3 of 39

Examples

  • >>> mytuple = (11, 22, 33)
  • >>> mytuple[0]�11
  • >>> mytuple[-1]�33
  • >>> mytuple[0:1]�(11,)
  • The comma is required!

4 of 39

Why?

  • No confusion possible between [11] and 11

  • (11) is a perfectly acceptable expression
    • (11) without the comma is the integer 11
    • (11, ) with the comma is a list containing the integer 11
  • Sole dirty trick played on us by tuples!

5 of 39

Tuples are immutable

  • >>> mytuple = (11, 22, 33)
  • >>> saved = mytuple
  • >>> mytuple += (44,)
  • >>> mytuple�(11, 22, 33, 44)
  • >>> saved�(11, 22, 33)

6 of 39

Things that do not work

  • mytuple += 55�Traceback (most recent call last):Z�…�TypeError:� can only concatenate tuple (not "int") to tuple
    • Can understand that!

7 of 39

Sorting tuples

  • >>> atuple = (33, 22, 11)
  • >>> atuple.sort()�Traceback (most recent call last):�…�AttributeError:�'tuple' object has no attribute 'sort'
  • >>> atuple = sorted(atuple)
  • >>> atuple�[11, 22, 33]

Tuples are immutable!

sorted( ) returns a list!

8 of 39

Most other things work!

  • >>> atuple = (11, 22, 33)
  • >>> len(atuple)�3
  • >>> 44 in atuple�False
  • >>> [ i for [i for i in atuple]�[11, 22, 33]

9 of 39

The reverse does not work

  • >>> alist = [11, 22, 33]
  • >>> (i for i in alist)�<generator object <genexpr> at 0x02855DA0>
    • Does not work!

10 of 39

Converting sequences into tuples

  • >>> alist = [11, 22, 33]
  • >>> atuple = tuple(alist)
  • >>> atuple�(11, 22, 33)
  • >>> newtuple = tuple('Hello World!')
  • >>> newtuple�('H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!')

11 of 39

SETS

12 of 39

Sets

  • Indentified by curly braces
    • {'Alice', 'Bob', 'Carol'}
    • {'Dean'} is a singleton
  • Can only contain unique elements
    • Duplicates are eliminated
  • Immutable like tuples and strings

13 of 39

Sets do not contain duplicates

  • >>> cset = {11, 11, 22}
  • >>> cset�{11, 22}

14 of 39

Sets are immutable

  • >>> aset = {11, 22, 33}
  • >>> bset = aset
  • >>> aset = aset | {55}
  • >>> aset�{33, 11, 22, 55}
  • >>> bset�{33, 11, 22}

Union of two sets

15 of 39

Sets have no order

  • >>> {1, 2, 3, 4, 5, 6, 7}�{1, 2, 3, 4, 5, 6, 7}
  • >>> {11, 22, 33}�{33, 11, 22}

16 of 39

Sets do not support indexing

  • >>> myset = {'Apples', 'Bananas', 'Oranges'}
  • >>> myset�{'Bananas', 'Oranges', 'Apples'}
  • >>> myset[0]�Traceback (most recent call last):� File "<pyshell#2>", line 1, in <module>� myset[0]�TypeError: 'set' object does not support indexing

17 of 39

Examples

  • >>> alist = [11, 22, 33, 22, 44]
  • >>> aset = set(alist)
  • >>> aset�{33, 11, 44, 22}
  • >>> aset = aset + {55}�SyntaxError: invalid syntax

18 of 39

Boolean operations on sets (I)

  • Union of two sets

  • Contains all elements that are in set A or in set B

A

B

19 of 39

Boolean operations on sets (II)

  • Intersection of two sets

  • Contains all elements that are in both sets A and B

A

B

20 of 39

Boolean operations on sets (III)

  • Difference of two sets

  • Contains all elements that are in A but not in B

A

B

21 of 39

Boolean operations on sets (IV)

  • Symmetric difference of two sets

  • Contains all elements that are either
    • in set A but not in set B or
    • in set B but not in set A

A

B

22 of 39

Boolean operations on sets (V)

  • >>> aset = {11, 22, 33}
  • >>> bset = {12, 23, 33}
  • Union of two sets
    • >>> aset | bset �{33, 22, 23, 11, 12}
  • Intersection of two sets:
    • >>> aset & bset�{33}

23 of 39

Boolean operations on sets (VI)

  • >>> aset = {11, 22, 33}
  • >>> bset = {12, 23, 33}
  • Difference:
    • >>> aset – bset�{11, 22}
  • Symmetric difference:
    • >>> aset ^ bset�{11, 12, 22, 23}

24 of 39

DICTIONARIES

Very useful!

25 of 39

Dictionaries (I)

  • Store pairs of entries called items�{ 'CS' : '743-713-3350', 'UHPD' : '713-743-3333'}
  • Each pair of entries contains
    • A key
    • A value
  • Key and values are separated by a colon
  • Paris of entries are separated by commas
  • Dictionary is enclosed within curly braces

26 of 39

Usage

  • Keys must be unique within a dictionary
    • No duplicates
  • If we have� age = {'Alice' : 25, 'Bob' :28}�then� age['Alice'] is 25�and� age[Bob'] is 28

27 of 39

Dictionaries are mutable

  • >>> age = {'Alice' : 25, 'Bob' : 28}
  • >>> saved = age
  • >>> age['Bob'] = 29
  • >>> age�{'Bob': 29, 'Alice': 25}
  • >>> saved�{'Bob': 29, 'Alice': 25}

28 of 39

Keys must be unique

  • >>> age = {'Alice' : 25, 'Bob' : 28, 'Alice' : 26}
  • >>> age�{'Bob': 28, 'Alice': 26}

29 of 39

Displaying contents

  • >>> age = {'Alice' : 25, 'Carol': 'twenty-two'}
  • >>> age.items()�dict_items([ ('Alice', 25), ('Carol', 'twenty-two')])
  • >>> age.keys()�dict_keys([ 'Alice', 'Carol'])
  • age.values()�dict_values([28, 25, 'twenty-two'])

30 of 39

Updating directories

  • >>> age = {'Alice': 26 , 'Carol' : 22}
  • >>> age.update({'Bob' : 29})
  • >>> age�{'Bob': 29, 'Carol': 22, 'Alice': 26}
  • >>> age.update({'Carol' : 23})
  • >>> age�{'Bob': 29, 'Carol': 23, 'Alice': 26}

31 of 39

Returning a value

  • >>> age = {'Bob': 29, 'Carol': 23, 'Alice': 26}
  • >>> age.get('Bob')�29
  • >>> age['Bob']�29

32 of 39

Removing a specific item (I)

  • >>> a = {'Alice' : 26, 'Carol' : 'twenty-two'}
  • >>> a�{'Carol': 'twenty-two', 'Alice': 26}
  • >>> a.pop('Carol’)�'twenty-two'
  • >>> a�{'Alice': 26}

33 of 39

Removing a specific item (II)

  • >>> a.pop('Alice')�26
  • >>> a�{}
  • >>>

34 of 39

Remove a random item

  • >>> age = {'Bob': 29, 'Carol': 23, 'Alice': 26}
  • >>> age.popitem()�('Bob', 29)
  • >>> age
  • {'Carol': 23, 'Alice': 26}
  • >>> age.popitem()�('Carol', 23)
  • >>> age�{'Alice': 26}

35 of 39

Summary

  • Strings, lists, tuples, sets and dictionaries all deal with aggregates
  • Two big differences
    • Lists and dictionaries are mutable
      • Unlike strings, tuples and sets
    • Strings, lists and tuples are ordered
      • Unlike sets and dictionaries

36 of 39

Mutable aggregates

  • Can modify individual items
    • x = [11, 22, 33]�x[0] = 44�will work
  • Cannot save current value
    • x = [11,22, 33]�y = x�will not work

37 of 39

Immutable aggregates

  • Cannot modify individual items
    • s = 'hello!'�s[0] = 'H'�is an ERROR
  • Can save current value
    • s= 'hello!'�t = s�will work

38 of 39

Ordered aggregates

  • Entities in the collection can be accessed through a numerical index
    • s= 'Hello!'�s[0]
    • x = ['Alice', 'Bob', 'Carol']�x[-1]
    • t = (11, 22)�t[1]

39 of 39

Other aggregates

  • Cannot index sets
    • myset = {'Apples', 'Bananas', 'Oranges'} myset[0] is WRONG
  • Can only index dictionaries through their keys
    • age = {'Bob': 29, 'Carol': 23, 'Alice': 26}�age['Alice'] works�age[0] is WRONG