Explain the difference between list comprehensions and generator expressions in Python, and when you would use each for data manipulation.