Buy Me a Coffee☕
*Memo:
A string can be read by indexing or slicing as shown below:
*Memo:
v = 'ABCDEFGH'
print(v)
# ABCDEFGH
print(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7])
print(v[-8], v[-7], v[-6], v[-5], v[-4], v[-3], v[-2], v[-1])
# A B C D E F G H
print(v[:])
print(v[::])
# ABCDEFGH
print(v[::2])
# ACEG
print(v[::-2])
# HFDB
print(v[2:])
print(v[-6:])
print(v[2::])
print(v[-6::])
# CDEFGH
print(v[2::2])
print(v[-6::2])
# CEG
print(v[2::-2])
print(v[-6::-2])
# CA
print(v[:6])
print(v[:-2])
print(v[:6:])
print(v[:-2:])
# ABCDEF
print(v[:6:2])
print(v[:-2:2])
# ACE
print(v[:6:-2])
print(v[:-2:-2])
# H
print(v[2:6])
print(v[-6:-2])
print(v[2:6:])
print(v[-6:-2:])
# CDEF
print(v[2:6:2])
print(v[-6:-2:2])
# CE
print(v[2:6:-2])
print(v[-6:-2:-2])
# Nothing
A string cannot be changed by indexing or slicing as shown below:
*Memo:
v = 'abcdef'
v[0] = 'X'
v[2:6] = ['Y', 'Z']
# TypeError: 'str' object does not support item assignment
v = 'abcdef'
del v[0], v[3:5]
# TypeError: 'str' object does not support item deletion
v = 'abcdef'
del v
print(v)
# NameError: name 'v' is not defined
If you really want to change a string, use list() and join() as shown below:
v = 'abcdef'
v = list(v)
v[0] = 'X'
v[2:6] = ['Y', 'Z']
v = ''.join(v)
print(v)
# XbYZ
v = 'abcdef'
v = list(v)
del v[0], v[3:5]
v = ''.join(v)
print(v)
# bcd
A string can be unpacked with an assignment and for statement, the function and * but not with ** as shown below:
v1, v2, v3 = 'ABC'
print(v1, v2, v3)
# A B C
v1, *v2, v3 = 'ABCDEF'
print(v1, v2, v3) # A ['B', 'C', 'D', 'E'] F
print(v1, *v2, v3) # A B C D E F
print(*v1, *v2, *v3) # A B C D E F
for v1, v2, v3 in ['ABC', 'DEF']:
print(v1, v2, v3)
# A B C
# D E F
for v1, *v2, v3 in ['ABCDEF', 'GHIJKL']:
print(v1, v2, v3)
print(v1, *v2, v3)
print(*v1, *v2, *v3)
# A ['B', 'C', 'D', 'E'] F
# A B C D E F
# A B C D E F
# G ['H', 'I', 'J', 'K'] L
# G H I J K L
# G H I J K L
print(*'ABCD', *'EF')
# A B C D E F
print([*'ABCD', *'EF'])
# ['A', 'B', 'C', 'D', 'E', 'F']
def func(p1='a', p2='b', p3='c', p4='d', p5='e', p6='f'):
print(p1, p2, p3, p4, p5, p6)
func()
# a b c d e f
func(*'ABCD', *'EF')
# A B C D E F
def func(p1='a', p2='b', *args):
print(p1, p2, args)
print(p1, p2, *args)
print(p1, p2, [0, 1, *args, 2, 3])
func()
# a b ()
# a b Nothing
# a b [0, 1, 2, 3]
func(*'ABCD', *'EF')
# A B ('C', 'D', 'E', 'F')
# A B C D E F
# A B [0, 1, 'C', 'D', 'E', 'F', 2, 3]
A string can be continuously used through multiple variables as shown below:
v1 = v2 = v3 = 'ABCDE' # Equivalent
# v1 = 'ABCDE'
print(v1) # ABCDE # v2 = v1
print(v2) # ABCDE # v3 = v2
print(v3) # ABCDE
A string cannot be shallow-copied and deep-copied as shown below:
Shallow & Deep copy>:
*Memo:
import copy
v1 = 'ABCDE'
v2 = copy.copy(v1)
v2 = str(v1)
v2 = v1[:]
v2 = copy.deepcopy(v1)
print(v1, v1[2]) # ABCDE C
print(v2, v2[2]) # ABCDE C
print(v1 is v2, v1[2] is v2[2])
# True True
More...
*Memo:
A string can be read by indexing or slicing as shown below:
*Memo:
- Indexing can be done with one or more [index].
- Slicing can be done with one or more [start:end:step]:
- start(Optional-Default:The index of the 1st element):
- It's a start index(inclusive).
- end(Optional-Default:The index of the last element + 1):
- It's an end index(exclusive).
- step(Optional-Default:1):
- It's the interval of indices.
- It cannot be zero.
- The [] with at least one : is slicing.
- start(Optional-Default:The index of the 1st element):
v = 'ABCDEFGH'
print(v)
# ABCDEFGH
print(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7])
print(v[-8], v[-7], v[-6], v[-5], v[-4], v[-3], v[-2], v[-1])
# A B C D E F G H
print(v[:])
print(v[::])
# ABCDEFGH
print(v[::2])
# ACEG
print(v[::-2])
# HFDB
print(v[2:])
print(v[-6:])
print(v[2::])
print(v[-6::])
# CDEFGH
print(v[2::2])
print(v[-6::2])
# CEG
print(v[2::-2])
print(v[-6::-2])
# CA
print(v[:6])
print(v[:-2])
print(v[:6:])
print(v[:-2:])
# ABCDEF
print(v[:6:2])
print(v[:-2:2])
# ACE
print(v[:6:-2])
print(v[:-2:-2])
# H
print(v[2:6])
print(v[-6:-2])
print(v[2:6:])
print(v[-6:-2:])
# CDEF
print(v[2:6:2])
print(v[-6:-2:2])
# CE
print(v[2:6:-2])
print(v[-6:-2:-2])
# Nothing
A string cannot be changed by indexing or slicing as shown below:
*Memo:
- A del statement can still be used to remove one or more variables themselves.
v = 'abcdef'
v[0] = 'X'
v[2:6] = ['Y', 'Z']
# TypeError: 'str' object does not support item assignment
v = 'abcdef'
del v[0], v[3:5]
# TypeError: 'str' object does not support item deletion
v = 'abcdef'
del v
print(v)
# NameError: name 'v' is not defined
If you really want to change a string, use list() and join() as shown below:
v = 'abcdef'
v = list(v)
v[0] = 'X'
v[2:6] = ['Y', 'Z']
v = ''.join(v)
print(v)
# XbYZ
v = 'abcdef'
v = list(v)
del v[0], v[3:5]
v = ''.join(v)
print(v)
# bcd
A string can be unpacked with an assignment and for statement, the function and * but not with ** as shown below:
v1, v2, v3 = 'ABC'
print(v1, v2, v3)
# A B C
v1, *v2, v3 = 'ABCDEF'
print(v1, v2, v3) # A ['B', 'C', 'D', 'E'] F
print(v1, *v2, v3) # A B C D E F
print(*v1, *v2, *v3) # A B C D E F
for v1, v2, v3 in ['ABC', 'DEF']:
print(v1, v2, v3)
# A B C
# D E F
for v1, *v2, v3 in ['ABCDEF', 'GHIJKL']:
print(v1, v2, v3)
print(v1, *v2, v3)
print(*v1, *v2, *v3)
# A ['B', 'C', 'D', 'E'] F
# A B C D E F
# A B C D E F
# G ['H', 'I', 'J', 'K'] L
# G H I J K L
# G H I J K L
print(*'ABCD', *'EF')
# A B C D E F
print([*'ABCD', *'EF'])
# ['A', 'B', 'C', 'D', 'E', 'F']
def func(p1='a', p2='b', p3='c', p4='d', p5='e', p6='f'):
print(p1, p2, p3, p4, p5, p6)
func()
# a b c d e f
func(*'ABCD', *'EF')
# A B C D E F
def func(p1='a', p2='b', *args):
print(p1, p2, args)
print(p1, p2, *args)
print(p1, p2, [0, 1, *args, 2, 3])
func()
# a b ()
# a b Nothing
# a b [0, 1, 2, 3]
func(*'ABCD', *'EF')
# A B ('C', 'D', 'E', 'F')
# A B C D E F
# A B [0, 1, 'C', 'D', 'E', 'F', 2, 3]
A string can be continuously used through multiple variables as shown below:
v1 = v2 = v3 = 'ABCDE' # Equivalent
# v1 = 'ABCDE'
print(v1) # ABCDE # v2 = v1
print(v2) # ABCDE # v3 = v2
print(v3) # ABCDE
A string cannot be shallow-copied and deep-copied as shown below:
Shallow & Deep copy>:
*Memo:
- v1 and v2 refer to the same string and each same character.
- is keyword can check if v1 and v2 refer to the same string and/or each same character.
- copy.copy(), str() and slicing cannot shallow-copy a string.
- copy.deepcopy() cannot deep-copy and even shallow-copy a string.
import copy
v1 = 'ABCDE'
v2 = copy.copy(v1)
v2 = str(v1)
v2 = v1[:]
v2 = copy.deepcopy(v1)
print(v1, v1[2]) # ABCDE C
print(v2, v2[2]) # ABCDE C
print(v1 is v2, v1[2] is v2[2])
# True True
More...