Strings

Un tipus de dades compost

  • Anomenarem string a tot objecte de tipus (o classe) str.

  • Un string està compost de caràcters.

  • Un tipus de dades compost està compost d’objectes de tipus més simples.

  • L’operador claudàtor [] selecciona un únic caràcter d’un string.

  • L’expressió entre claudàtors s’anomena índex.

  • Indexats a partir de zero.

    >>> adr = "joan@exemple.com"
    >>> type(adr)
    <class 'str'>
    >>> adr[0]
    'j'
    >>> adr[4]
    '@'
    

Longitud

  • La funció len retorna el nombre de caràcters d’un string.

  • Els darrer element d’un string ocupa l’índex longitud menys u.

  • Els índexos negatius comencen a comptar des del final del string.

    >>> adr = "joan@exemple.com"
    >>> la = len(adr)
    >>> la
    16
    >>> adr[la - 1]
    'm'
    >>> adr[-1]
    'm'
    
  • String buit o nul.

    >>> s = ''
    >>> type(s)
    <class 'str'>
    >>> s
    ''
    >>> len(s)
    0
    

Llesques d’string

  • L’operador llesca string[n:m] obté el substring que comença en el caràcter d’index n inclòs i acaba en el d’índex m exclòs.

  • n es pot ometre: comença en el primer caràcter

  • m es pot ometre: va fins al darrer caràcter

  • Si s’ometen tots dos: tot l’string.

  • Llesques esteses: string[n:m:p] obté el substring que comença en el caràcter d’index n inclòs i acaba en el d’índex m exclòs amb pas p.

    >>> adr = "joan@exemple.com"
    
    >>> nom = adr[0:4]
    >>> nom
    'joan'
    >>> domini = adr[5:16]
    >>> domini
    'exemple.com'
    
    >>> nom = adr[:4]
    >>> nom
    'joan'
    >>> domini = adr[5:]
    >>> domini
    'exemple.com'
    
    >>> pd = adr[5:12]
    >>> pd
    'exemple'
    

Comparació d’strings

  • Operadors: ==, !=, <, >, <=, >=.

  • Ordre lexicogràfic.

    >>> x, y = 'hipopòtam', 'hipotàlem'
    
    >>> x == y
    False
    >>> x != y
    True
    >>> x < y
    True
    >>> x > y
    False
    
    >>> 'a' == 'A'
    False
    >>> 'a' < 'A'
    False
    >>> 'a' != 'à'
    True
    >>> 'a' > 'à'
    False
    
    >>> '8' < '10'
    False
    >>> '08' < '10'
    True
    

L’operador in

  • a in b: pertany a a l’string b?

  • a not in b: a no pertany a l’string b?

    >>> adr = "joan@exemple.com"
    
    >>> '@' in adr
    True
    >>> ' ' not in adr
    True
    >>> not (' ' in adr)
    True
    
    >>> adr_val = '@' in adr and '.' in adr and ' ' not in adr
    >>> adr_val
    True
    

Concatenació d’strings

  • Operador +.

    >>> nom = "joan"
    >>> domini = "exemple.com"
    >>> adr = nom + '@' + domini
    >>> adr
    'joan@exemple.com'
    

Els strings són immutables

  • Un string no canvia mai.

Mètodes d’strings

  • Vegeu l’apartat String Methods de The Python Standard Library.

  • A la pràctica, un mètode es comporta com una funció, però amb una sintaxi de crida diferent:

    >>> 'maryland'.capitalize()
    'Maryland'
    >>> "what's all this, then, amen?".title()
    "What'S All This, Then, Amen?"
    >>> 'How to Center Text Using Python'.center(70)
    '                   How to Center Text Using Python                    '
    >>> 'angola'.upper()
    'ANGOLA'
    
  • Els mètodes d’string formen part dels objectes string, i s’invoquen (es criden) aplicant l’operador punt (.) després de l’objecte seguit pel nom del mètode.

Comptar

  • count()

    >>> adr = "joan@exemple.com"
    >>> adr_val = adr.count('@') == 1 and '.' in adr and ' ' not in adr
    >>> adr_val
    True
    

Cercar i substituir

  • find()

  • index()

    >>> adr = "joan@exemple.com"
    
    >>> iarroba = adr.find('@')
    >>> iarroba
    4
    >>> ipunt = adr.find('.')
    >>> ipunt
    12
    
    >>> nom = adr[:iarroba]
    >>> nom
    'joan'
    
    >>> domini = adr[iarroba+1:]
    >>> domini
    'exemple.com'
    
    >>> pd = adr[iarroba+1:ipunt]
    >>> pd
    'exemple'
    
  • replace()

    >>> nom = "Joan del Riu"
    >>> domini = "exemple.com"
    
    >>> adr = nom.replace(' ', '_') + '@' + domini
    >>> adr
    'Joan_del_Riu@exemple.com'
    
  • strip().

>>> nom_b = " \t Joan del Riu\n"
>>> nom_b
' \t Joan del Riu\n'
>>> print(nom_b)
         Joan del Riu
>>> domini_b = " \n  exemple.com "
>>> domini_b
' \n  exemple.com '
>>> print(domini_b)

exemple.com

>>> nom = nom_b.strip()
>>> nom
'Joan del Riu'
>>> domini = domini_b.strip()
>>> domini
'exemple.com'
>>> adr = nom.replace(' ', '_') + '@' + domini
>>> adr
'Joan_del_Riu@exemple.com'

Classificació de caràcters

Majúscules i minúscules

  • upper()

    >>> 'abC 3'.upper()
    'ABC 3'
    
  • lower()

    >>> 'abC 3'.lower()
    'abc 3'
    
  • capitalize()

    >>> 'alguna paraula més?'.capitalize()
    'Alguna paraula més?'
    

Formatat de strings

>>> hora = 8
>>> minuts = 30
>>>
>>> '{}:{}'.format(hora, minuts)
'8:30'