Data structures‎ > ‎

Lists

# create a list
mylist = ['A', 'B', 'C']

# length (number of elements)
len(mylist)
3

# Is 'B' member in my list?
>>> 'B' in mylist
True

if 'B' in mylist:
    print('yes')

# find position of element in list
IDX = mylist.index('B') # 0-based index
[1]
mylist[IDX]
'B'

IDX = [i for i,x in enumerate(mylist,1) if x == 'B'] # 1-based index
[2]

# remove element from list
mylist = ['A','B','C']
mylist.remove('B')
  ['A', 'C']

# in case of multiple elements, 'remove' deletes only the first item
mylist = ['A','B','C','B']
mylist.remove('B')
  ['A', 'C', 'B']

# remove multiple elements from multiple positions in a list
# remove letters 'B' and 'C' from all positions in a list ( → list comprehension)
mylist = ['A','B','C','D','A','B','C','D']
remove_set = ('B','C')
mylist_reduced = [i for i in mylist if i not in remove_set] # create new reduced list
 ['A', 'D', 'A', 'D']


add (concatenate) lists
>>> mylist + ['D','E']
['A', 'B', 'C', 'D', 'E']

multi-copies of a list (repetition)
>>> 5 * ['A','B']
['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B']
>>> 5 * 'A'
'AAAAA'
>>> 5 * ['A']
['A', 'A', 'A', 'A', 'A']

subtract list
>>> list1=['D','B','C','A']
>>> list2=    ['B','C']

>>> [i for i in list1 if i not in list2]  # keep list order
['D', 'A']

>>> list(set(list1) - set(list2))  #
['A', 'D']




loops
for element in mylist:
    print(element)
A
B
C



indices (better avoid by using  'in', or a dictionary)
!! Python's 0-based indices start with 0 , not with 1
>>> months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
>>> months[0]
'Jan'
>>> months[4]
'May'

>>> months[10:]
['Nov', 'Dec']
>>> months[:2]
['Jan', 'Feb']
>>> months[2:10]
['Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct']
>>> months[0:5:2]
['Jan', 'Mar', 'May']


to access list elements by an index starting with 1, simply use a dummy first element 'None'
>>> months = [None, 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
>>> months[1]
'Jan'
>>> months[12]
'Dez'

get index
>>> months.index('May')
5

In short: 0-based is confusing when referring to objects: list-elements, items, fields, or boxes. But it make sense as a pointer (address) in time and data-streams (processing long files), referring to the start-position, not to the item, read more.








min / max
>>> min([4,3,8])
3
>>> max([4,3,8])
8



# get union, intersection, difference of lists:
# convert to list to set and use list operators
import sets
s1 = set(['A', 'B', 'C'])
s2 = set(['B', 'C','D'])

s1 & s2 # Intersection (overlap between both lists)
  set(['C', 'B'])

s1 | s2 # Union
  set(['A', 'C', 'B', 'D'])

s1 ^ s2 # (symmetric) difference
  set(['A', 'D'])