## Finding the Second Smallest Element in a List Using Python
When working with lists in Python, one common task is to find the second smallest element. This can be achieved efficiently with a simple function. Below is an implementation along with an explanation of how it works.
###### Python Function

def second_smallest(arr):
if len(arr) < 2:
raise ValueError("List must contain at least two distinct elements.")
first, second = float('inf'), float('inf')
for number in arr:
if number < first:
second = first
first = number
elif first < number < second:
second = number
if second == float('inf'):
raise ValueError("List must contain at least two distinct elements.")
return second

###### Explanation

1. **Input Validation**: The function starts by checking if the list has at least two elements. If not, it raises a *ValueError*.
2. **Initialization**: It initializes two variables, *first* and *second*, to infinity. These will keep track of the smallest and second smallest elements as the function iterates through the list.
3. **Iteration**: The function iterates over each number in the input list:
- If the current number is smaller than *first*, then *second* is updated to *first*, and *first* is updated to the current number.
- If the current number is greater than *first* but less than *second*, then *second* is updated to the current number.
4. **Final Check**: After the loop, if *second* remains as infinity, this indicates that there was no second distinct element. Thus, another *ValueError* is raised.
5. **Return Statement**: If a valid second smallest element is found, it is returned.
###### Example Usage

Here is how you can use the *second_smallest* function:
numbers = [4, 1, 3, 2, 4, 0, 5]
result = second_smallest(numbers)
print("The second smallest element is:", result) # Output: 1

###### Conclusion

This function provides a reliable method to find the second smallest element in a list while ensuring that the input criteria are met. It operates efficiently in linear time complexity \(O(n)\), making it suitable for long lists.