''' Operations :
To add element - list.append(), list.insert()
To remove element - list.pop(), list.remove()
To reverse a list - list.reverse()
To sort a list - list.sort()
# List: ordered, mutable, allows duplicate elements.
print("Hello World!")

# 1: index
myList = ['apple', 'banana', 28]
print(myList)
item = myList[0]
item1 = myList[-1]
print('1:', item, item1)

# 2: iterate
for i in myList:
    print('2:', i)

# 3: if loop
if 'banana' in myList:
    print('3:', 'yes')
else:
    print('3:', 'no')

# 4: length of list
print('4:', len(myList))

# 5: append method
myList.append("lemon")
print('5:', myList)

# 6: insert method
myList.insert(1, "blueberry")
print('6:', myList)

# 7: pop method
item2 = myList.pop()
print('7:', item2)

# 8: remove method
item3 = myList.remove("apple")
print('8:', myList)

# 9: reverse list
myList.reverse()
print('9:', myList)

# 10: sort list
list = [10, 8, -90, 8, 1, 34, -5]
print('10:', list)
sorted_list = sorted(list)
print('   ', sorted_list)

# or
"""list = [10, 8, -90, 8, 1, 34, -5]
print('10:', list)
sorted_list = list.sort()
print('   ', list)"""

# 11: duplication
mylist = [0] * 5
print('11:', mylist)

# 12: concatenation of two lists
mylist2 = [1, 2, 3, 4, 5]
new_list = mylist + mylist2
print('12:', new_list)

# 13: slicing
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
p = my_list[1:5]  # [start_index:stop_index]
q = my_list[:6]  # [blank_from_begining:stop_index]
r = my_list[::1]  # [start_index:stop_index:step_index]
s = my_list[::2]
t = my_list[::-1]
print('13:', p, '\\n   ', q, '\\n   ', r, '\\n   ', s, '\\n   ', t)

# 14: copy of a list
list_org = ['banana', 'cherry', 'apple']
list_cpy = list_org
list_cpy.append("lemon")
print('14: ', list_org)
print('    ', list_cpy)

# 15: list comprehension
my_List = [1, 2, 3, 4, 5, 6, 7, 8]
x = [i*i for i in my_List]
y = [i+i for i in my_List]
z = [i+1 for i in my_List]
print('15: ', my_List, '\\n    ', x, '\\n    ', y, '\\n    ', z)