Experimenting with Lists (Python)

vegaseat 3 Tallied Votes 405 Views Share

You may want to call Python's list the answer to other computer languages' arrays. Here we take a look at the things you can do with lists, create an empty list, list the attributes and methods, load, append, count, insert, join, pop, remove, remove duplicate items, reverse, search, sort, establish a list of files, the list goes on ...

# experimenting with Python's list
# tested with Python23      vegaseat     21feb2005

# import module os for method listdir()
import os

# creat an empty list (list object pointed to by iL)
iL = []

print "\nThese are the attributes and methods of a list:"
print dir(iL)

print "\nA list of America's Most Popular Lawyers:"
print iL

print "\nLoad the list with 0 to 9"
for number in range(10):
  iL.append(number)

print "\nShow the loaded list:"
print iL

print "\nSame but simpler:"
iL2 = range(10)
print iL2

print "\nThere are %d elements, min = %d, max = %d" % (len(iL), min(iL), max(iL))

print "\nShow the first element (lists are zero based):"
print iL[0]

print "\nShow the final element:"
print iL[-1]

print "\nSum up all the integers in the list:"
print sum(iL)

# this is called slicing
# [starting-at-index : but-less-than-index [ : step]]
# start defaults to 0, end to len(sequence), step to 1
print "\nShow the first 3 elements:"
print iL[:3]
print "\nShow every second element starting with index 1:"
print iL[1::2]
# cloning, assign one list to another list from start to end
iL2 = iL[:]
# aliasing is simpler, but iL3 retains the address of iL
# so if you change iL you also change iL3, oops!!!
iL3 = iL
print "\nList assigned to another list:"
print "original", iL, "id =", id(iL)
print "clone   ", iL2, "id =", id(iL2)
print "alias   ", iL3, "id =", id(iL3)

# search the list for integer 7
print "\nValue 7 is at index = %d\n" % iL.index(7)

# insert an element
print "Insert another 7 at that index:"
iL.insert(iL.index(7),7)
print iL
print

# check if there are two sevens
if iL.count(7) == 2 :
  print "There are two sevens in the list"
elif iL.count(7) == 1 :
  print "There is one seven in the list"
else:
  print "There are %d sevens in the list" % iL.count(7)

print "\nRemove the extra 7 :"
if iL.count(7) > 1 :
  iL.remove(7)
print iL

print "\nReverse the list:"
iL.reverse()
print iL

print "\nSort the list:"
iL.sort()
print iL

# insert a list
list1 = ['a', 'b', 'c', 'd', 'e']
print "\nOriginal list:"
print list1
print "Insert another list at index 3:"
list1.insert(3, ['n1', 'n2', 'n3'])
print list1  # ['a', 'b', 'c', ['n1', 'n2', 'n3'], 'd', 'e']

# using slicing to insert several elements into a list
# this inserts elements of ['n1', 'n2', 'n3'] at index 3:
list2 = ['a', 'b', 'c', 'd', 'e']
print "\nInsert elements of another list at index 3:"
list2[3:3] = ['n1', 'n2', 'n3']
print list2  # ['a', 'b', 'c', 'n1', 'n2', 'n3', 'd', 'e']

# using slicing to replace an element with other elements
# this replaces element at index 3 with elements of ['n1', 'n2', 'n3']:
list3 = ['a', 'b', 'c', 'd', 'e']
print "\nReplace element at index 3 with elements of another list:"
list3[3:4] = ['n1', 'n2', 'n3']
print list3  # ['a', 'b', 'c', 'n1', 'n2', 'n3', 'e']

# you can create a list of mixed types ...
mixedList = []
mixedList.append(1.23)
mixedList.append('a')
mixedList.append('mixed')
mixedList.append('type')
mixedList.append('list')
mixedList.append(77777)
mixedList.append(0xff)      # hex turns to decimal
mixedList.append(355/113.0) # approximation of pi
print "\nA list of mixed types:"
print mixedList

print

# show the difference between two lists using zip() and list comprehension
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = [1, 2, 3, 4, 4, 6, 7, 8, 9, 11]
print "list1 =", list1
print "list2 =", list2
print '-' * 60  # vanity line of dashes
print "These are the items different in the two lists:"
print [(x, y) for (x, y) in zip(list1, list2) if x != y]

# let's go from integers to strings ...
print "\nOriginal string:"
s = "I'm dreaming of a white precipitate"
print s

# create a list of strings
print "\nSeparate string at any whitespace to a list of words:"
sL = []
sL = s.split()
print sL

print "\nAdd 2 more words:"
sL.append("in")
sL.append("class")
print sL

# search the list for dreaming
print "\n'dreaming' is at index = %d\n" % sL.index('dreaming')

print "Insert an item at index 1 (moves rest of elements up):"
sL.insert( 1, "merrily")
print sL

print "\nInsert an item one index in from the end:"
sL.insert( -1, "chemistry")
print sL

print "\nPrint the list one item on a line:"
# new line as delimiter
print "\n".join(sL)

print "\nJoin the list of words to form a string again:"
# single space = " " as a delimiter
s2 = " ".join(sL)
print s2

print "\nRemove 'white' from the list:"
sL.remove('white')
print sL

# treat this list like a stack (last in first out)
# like a stack of dinner plates
print "\nOperate the present list like a stack (LIFO):"
print "pop last element = " + sL.pop()
print "pop second last  = " + sL.pop()
print "pop third last  = " + sL.pop()
print "this is left:"
print sL
print

# treat this list like a queue (first in first out)
# like the line at the store check-out
print "Operate the present list like a queue (FIFO):"
print "pop first element  = " + sL.pop(0)
print "pop second element = " + sL.pop(0)
print "this is left:"
print sL

print "\nSort this list:"
sL.sort()
print sL

print "\nIs 'of' in this list?"
if 'of' in sL:
  print 'yes'

# let's look at sorting a list of strings
str = "I really love Monty Python's Flying Circus"
wordList = []
wordList = str.split()
print "\nThe original list of words:"
print wordList
print "\nSort this list (the default sort is case sensitive):"
wordList.sort()
print wordList
# use anonymous function lambda to do a case insensitive sort
# in this example compare as all lower case strings
# (somewhat inefficient but sweet for short lists)
print "\nHere is a sort that is case insensitive:"
import string
wordList.sort(lambda x, y: cmp(string.lower(x), string.lower(y)))
print wordList

print

# a way to weed out duplicate words from a list
rawList = ['just', 'a', 'test', 'a', 'test', 'of', 'an', 'ordinary', 'string']
# create an empty list
uniqueList = []
# use a list comprehension statement (takes a while to understand)
[uniqueList.append(wrd) for wrd in rawList if not uniqueList.count(wrd)]
print "The raw list containing duplicates:"
print rawList
print "The unique list (no duplicates):"
print uniqueList

# find all the .bmp files in the Windows folder
print "\nAdd all the bitmap files in the Windows folder to a list:"
path = 'c:/windows/'
ext  = '.bmp'
# create an empty list
fileList = []
for filename in os.listdir(path):
  if filename.endswith(ext):
    fileList.append(filename)

# show the list of files
print fileList

print "\nShow one filename on each line:"
for filename in fileList:
  print filename
Lardmeister 461 Posting Virtuoso

The above snippet was a little dated so I modified it to run on Python27 and Python32:

# experimenting with Python's list
# tested with Python23      vegaseat     21feb2005
# modified via 2to3.py utility to work with Python3
# case insensitive sort has been updated 

# import module os for method listdir()
import os

# create an empty list
iL = []

print("\nThese are the attributes and methods of a list:")
print(dir(iL))

print("\nA list of America's Most Popular Lawyers:")
print(iL)

print("\nLoad the list with 0 to 9")
for number in range(10):
  iL.append(number)

print("\nShow the loaded list:")
print(iL)

print("\nSame but simpler:")
iL2 = list(range(10))
print(iL2)

print("\nThere are %d elements, min = %d, max = %d" % (len(iL), min(iL), max(iL)))

print("\nShow the first element (lists are zero based):")
print(iL[0])

print("\nShow the final element:")
print(iL[-1])

print("\nSum up all the integers in the list:")
print(sum(iL))

# this is called slicing
# [starting-at-index : but-less-than-index [ : step]]
# start defaults to 0, end to len(sequence), step to 1
print("\nShow the first 3 elements:")
print(iL[:3])
print("\nShow every second element starting with index 1:")
print(iL[1::2])
# cloning, assign one list to another list from start to end
iL2 = iL[:]
# aliasing is simpler, but iL3 retains the address of iL
# so if you change iL you also change iL3, oops!!!
iL3 = iL
print("\nList assigned to another list:")
print("original", iL, "id =", id(iL))
print("clone   ", iL2, "id =", id(iL2))
print("alias   ", iL3, "id =", id(iL3))

# search the list for integer 7
print("\nValue 7 is at index = %d\n" % iL.index(7))

# insert an element
print("Insert another 7 at that index:")
iL.insert(iL.index(7),7)
print(iL)
print('')

# check if there are two sevens
if iL.count(7) == 2 :
  print("There are two sevens in the list")
elif iL.count(7) == 1 :
  print("There is one seven in the list")
else:
  print("There are %d sevens in the list" % iL.count(7))

print("\nRemove the extra 7 :")
if iL.count(7) > 1 :
  iL.remove(7)
print(iL)

print("\nReverse the list:")
iL.reverse()
print(iL)

print("\nSort the list:")
iL.sort()
print(iL)

# insert a list
list1 = ['a', 'b', 'c', 'd', 'e']
print("\nOriginal list:")
print(list1)
print("Insert another list at index 3:")
list1.insert(3, ['n1', 'n2', 'n3'])
print(list1)  # ['a', 'b', 'c', ['n1', 'n2', 'n3'], 'd', 'e']

# using slicing to insert several elements into a list
# this inserts elements of ['n1', 'n2', 'n3'] at index 3:
list2 = ['a', 'b', 'c', 'd', 'e']
print("\nInsert elements of another list at index 3:")
list2[3:3] = ['n1', 'n2', 'n3']
print(list2)  # ['a', 'b', 'c', 'n1', 'n2', 'n3', 'd', 'e']

# using slicing to replace an element with other elements
# this replaces element at index 3 with elements of ['n1', 'n2', 'n3']:
list3 = ['a', 'b', 'c', 'd', 'e']
print("\nReplace element at index 3 with elements of another list:")
list3[3:4] = ['n1', 'n2', 'n3']
print(list3)  # ['a', 'b', 'c', 'n1', 'n2', 'n3', 'e']

# you can create a list of mixed types ...
mixedList = []
mixedList.append(1.23)
mixedList.append('a')
mixedList.append('mixed')
mixedList.append('type')
mixedList.append('list')
mixedList.append(77777)
mixedList.append(0xff)      # hex turns to decimal
mixedList.append(355/113.0) # approximation of pi
print("\nA list of mixed types:")
print(mixedList)

print('')

# show the difference between two lists using zip() and list comprehension
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = [1, 2, 3, 4, 4, 6, 7, 8, 9, 11]
print("list1 =", list1)
print("list2 =", list2)
print('-' * 60)  # vanity line of dashes
print("These are the items different in the two lists:")
print([(x, y) for (x, y) in zip(list1, list2) if x != y])

# let's go from integers to strings ...
print("\nOriginal string:")
s = "I'm dreaming of a white precipitate"
print(s)

# create a list of strings
print("\nSeparate string at any whitespace to a list of words:")
sL = []
sL = s.split()
print(sL)

print("\nAdd 2 more words:")
sL.append("in")
sL.append("class")
print(sL)

# search the list for dreaming
print("\n'dreaming' is at index = %d\n" % sL.index('dreaming'))

print("Insert an item at index 1 (moves rest of elements up):")
sL.insert( 1, "merrily")
print(sL)

print("\nInsert an item one index in from the end:")
sL.insert( -1, "chemistry")
print(sL)

print("\nPrint the list one item on a line:")
# new line as delimiter
print("\n".join(sL))

print("\nJoin the list of words to form a string again:")
# single space = " " as a delimiter
s2 = " ".join(sL)
print(s2)

print("\nRemove 'white' from the list:")
sL.remove('white')
print(sL)

# treat this list like a stack (last in first out)
# like a stack of dinner plates
print("\nOperate the present list like a stack (LIFO):")
print("pop last element = " + sL.pop())
print("pop second last  = " + sL.pop())
print("pop third last  = " + sL.pop())
print("this is left:")
print(sL)
print('')

# treat this list like a queue (first in first out)
# like the line at the store check-out
print("Operate the present list like a queue (FIFO):")
print("pop first element  = " + sL.pop(0))
print("pop second element = " + sL.pop(0))
print("this is left:")
print(sL)

print("\nSort this list:")
sL.sort()
print(sL)

print("\nIs 'of' in this list?")
if 'of' in sL:
  print('yes')

# let's look at sorting a list of strings
mystr = "I really love Monty Python's Flying Circus"
wordList = []
wordList = mystr.split()
print("\nThe original list of words:")
print(wordList)
print("\nSort this list (the default sort is case sensitive):")
wordList.sort()
print(wordList)

print("\nHere is a sort that is case insensitive:")
wordList.sort(key=str.lower)  # updated
print(wordList)

print('')

# a way to weed out duplicate words from a list
rawList = ['just', 'a', 'test', 'a', 'test', 'of', 'an', 'ordinary', 'string']
# create an empty list
uniqueList = []
# use a list comprehension statement (takes a while to understand)
[uniqueList.append(wrd) for wrd in rawList if not uniqueList.count(wrd)]
print("The raw list containing duplicates:")
print(rawList)
print("The unique list (no duplicates):")
print(uniqueList)

# find all the .bmp files in the Windows folder
print("\nAdd all the bitmap files in the Windows folder to a list:")
path = 'c:/windows/'
ext  = '.bmp'
# create an empty list
fileList = []
for filename in os.listdir(path):
  if filename.endswith(ext):
    fileList.append(filename)

# show the list of files
print(fileList)

print("\nShow one filename on each line:")
for filename in fileList:
  print(filename)
Lardmeister 461 Posting Virtuoso

The original code also used str as a variable name, a real no-no!
It screws up str.lower in the sort.

vegaseat 1,735 DaniWeb's Hypocrite Team Colleague

Again, thanks a lot for the timely update!
I had just started with Python 8 years ago, made some mistakes as you found out.
Using Python function names for variable names can give troublesome errors.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.