"""
# <center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">Basic Setup</center>
"""
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
"""
![Pythone Data types](https://i.imgur.com/AXJjK5Z.png)
"""
"""
# <center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">List Data type</center>
"""
# Initialize List Variable
list1 = [2, 4, 6, 8, 1, 3, 5, 7, 0]
print("Original list")
print(list1)
print()

# List is ORDERED, as it can be sort with order
print("List is ORDERED, as it can be sort with order")
list1.sort()
print(list1)
print()

# List is CHANGABLE, You can change value of list element
print("List is CHANGABLE, You can change value of list element")
list1[1] = 2000
print(list1)
list1[1] = 4
print(list1)
print()

# List is INDEXED, You can get index of an element
list1 = [2, 4, 6, 8, 1, 3, 5, 7, 0]
print("List is INDEXED, You can get by its index")
print(list1[3]) # Get element by its index
print(list1.index(3)) # Get index by its element
print()

# List can have DUPLICATE values
list1 = [2, 4, 6, 8, 1, 3, 5, 7, 0, 2, 4, 6, 8, 1, 3, 5, 7, 0]
print("List can have DUPLICATE values")
print(list1)
"""
# <center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">Tuple Data type</center>
"""
# Initialize List Variable
tuple1 = (2, 4, 6, 8, 1, 3, 5, 7, 0)
print("Original tuple")
print(tuple1)
print()

# Tuple is ORDERED, as it can be sort with order
print("Tuple is ORDERED, as it can be sort with order")
tuple1 = sorted(tuple1)
print(tuple1) # It will give List
print()

# Tuple is NOT CHANGABLE, You can not change value of tuple element
tuple1 = (2, 4, 6, 8, 1, 3, 5, 7, 0)
print("Tuple is NOT CHANGABLE, You can not change value of tuple element")
# If you open below line, than it will give error
# tuple1[1] = 2000

# Tuple is INDEXED, You can get index of an element
tuple1 = [2, 4, 6, 8, 1, 3, 5, 7, 0]
print("Tuple is INDEXED, You can get by its index")
print(tuple1[3]) # Get element by its index
print(tuple1.index(3)) # Get index by its element
print()

# Tuple can have DUPLICATE values
tuple1 = (2, 4, 6, 8, 1, 3, 5, 7, 0, 2, 4, 6, 8, 1, 3, 5, 7, 0)
print("Tuple can have DUPLICATE values")
print(tuple1)
"""
# <center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">Set Data type</center>
"""
# Initialize Set Variable
set1 = {2, 4, 6, 8, 1, 3, 5, 7, 0}
print("Original set changed as it may return the changed sequence of the element")
# Set is NOT ORDERED,
print("Set is NOT ORDERED")
print(set1)
print()

# By below code you can change order which give output as List
print("By below code you can change order which give output as List")
set2 = sorted(set1, reverse=True)
print(set2) # It will give List
print()

# Set is CHANGABLE, You can change value of set element
print("Set is CHANGABLE, You can change value of set element")
set_dict = {1: 'One', 2: 'Two'}
print("Original set value")
print(set_dict)
set_dict.update({1: 'Three', 2: 'Four'})
print("Updated set value")
print(set_dict)
print()
    
# Set is NOT INDEXED, You can not get element value by index
print("Set is NOT INDEXED, You can not get element value by index")
# Opening below line will throw error, "'set' object is not subscriptable"
# print(set1[3]) # Get element by its index
print()

# Set can NOT HAVE DUPLICATE values, Duplicate values will be ignored
set1 = {2, 4, 6, 8, 1, 3, 5, 7, 0, 2, 4, 6, 8, 1, 3, 5, 7, 0}
print("Set can NOT HAVE DUPLICATE values, Duplicate values will be ignored")
print(set1)
"""
# <center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">Dictionary Data type</center>
"""
# Initialize Dictionary Variable
dict1 = {'two': 2, 'three': 3, 'one': 1, 'four': 4}
print("Original dictionary")
print(dict1)
print()

# Dictionary is NOT ORDERED, as it can not sort with order directly with built in function
print("Dictionary is NOT ORDERED, as it can not sort with order directly with built in function")
print()

# Dictionary is CHANGABLE, You can change value of dictionary element
print("Dictionary is CHANGABLE, You can change value of dictionary element")
dict1['two'] = 2000
print(dict1)
dict1['two'] = 2
print(dict1)
print()

# Dictionary is INDEXED, You can get index of an element (we can use its "KEY" as an "INDEX")
print("Printing value by its key 'three'")
print(dict1['three'])
print()

# Dictionary can have DUPLICATE values in VALUE, but can NOT HAVE DUPLICATE KEYS
# DUPLICATE keys will update by last/latest occurrence of key value 
dict2 = {'two': 2, 'three': 3, 'one': 1, 'four': 4, 'two': 200}
print("Dictionary can have DUPLICATE values in VALUE, but can NOT HAVE DUPLICATE KEYS")
print("DUPLICATE keys will update by last/latest occurrence of key value ")
print(dict2)
print()

# Dictionary - below is an example of duplicate values (not key)
print("Dictionary - below is an example of duplicate values (not key)")
dict3 = {'two': 2, 'three': 3, 'one': 1, 'four': 4, 'second': 2}
print(dict3)
print()
"""
<h2><center style="background-color:#4267B2; color:white; padding: 10px; border-radius:40px 40px;">Let me know in comments if you found it useful</center></h2>
"""