Quick answer: Remove only the line-ending characters when that is the requirement. rstrip(‘\r\n’) preserves meaningful spaces, while strip() removes more than a newline and can change data.

To remove newline characters from a list in Python, clean each string in the list. The safest default is a list comprehension with rstrip() or strip(), depending on whether you want to remove only line endings or all surrounding whitespace.
Newline cleanup appears after reading files, parsing copied text, scraping lines, or splitting multiline strings. The key decision is whether \n appears only at the end of each item, or whether newline characters can appear inside the text too.
Quick Answer
Use rstrip() when each list item may end with a newline. Python documents str.rstrip() as a string method that removes trailing characters.
lines = ["alpha\n", "beta\n", "gamma\n"]
clean = [line.rstrip("\n") for line in lines]
print(clean)
This returns ['alpha', 'beta', 'gamma']. It removes trailing \n without changing other characters in the string.
Use strip() to Remove Surrounding Whitespace
strip() removes whitespace from both ends of a string, including spaces, tabs, carriage returns, and newlines. The official str.strip() documentation covers its behavior.
lines = [" alpha\n", "beta\t", " gamma \r\n"]
clean = [line.strip() for line in lines]
print(clean)
Use this when leading and trailing whitespace should be removed together. Do not use it if leading spaces are meaningful, such as in indented code or fixed-width text.
Use rstrip() for Line Endings
When you only want to clean the end of each string, rstrip() is usually more precise than strip(). It can also handle Windows-style \r\n endings.
lines = ["alpha\r\n", "beta\n", "gamma"]
clean = [line.rstrip("\r\n") for line in lines]
print(clean)
This removes trailing carriage returns and newlines while preserving leading spaces. If your goal is to control output formatting rather than clean input data, see PythonPool’s print without newline and print blank line guides.

Use removesuffix() for One Exact Newline
In Python 3.9 and newer, removesuffix() removes one exact suffix. It is useful when you want to remove a single final newline and leave other whitespace alone. Python documents str.removesuffix(), and PEP 616 explains why these prefix and suffix methods were added.
lines = ["alpha\n", "beta\n", "gamma"]
clean = [line.removesuffix("\n") for line in lines]
print(clean)
This is more literal than rstrip("\n"). If a string ends with two newline characters, removesuffix("\n") removes only one of them.
Use replace() for Newlines Anywhere
replace() removes newline characters wherever they appear in each string. The official str.replace() reference covers the method.
items = ["first\nline", "second\nline", "third"]
clean = [item.replace("\n", " ") for item in items]
print(clean)
Use this when embedded newlines should become spaces or empty strings. For changing values already inside a list, PythonPool’s replace item in list guide is a useful related article.

Use re.sub() for Multiple Line Break Types
Regular expressions are helpful when you need to collapse one or more newline-like characters into a single separator. Python’s re.sub() documentation covers regex replacement.
import re
items = ["alpha\n\n", "beta\r\n", "gamma"]
clean = [re.sub(r"[\r\n]+$", "", item) for item in items]
print(clean)
Use regex only when the simpler string methods are not expressive enough. For ordinary file lines, rstrip("\r\n") is usually easier to read.
Use map() for a Compact Form
map() applies a function to every item. It is concise, but many Python readers find a list comprehension easier to scan. PythonPool’s map function guide covers more examples.
lines = ["alpha\n", "beta\n", "gamma\n"]
clean = list(map(str.rstrip, lines))
print(clean)
This removes all trailing whitespace because str.rstrip is called without an argument. If you need only newline characters removed, prefer the explicit list comprehension form with rstrip("\r\n").
Update the Existing List In Place
If other code holds a reference to the same list, update each index instead of creating a new list. enumerate() provides the index and value together, which Python documents in the enumerate() reference.
lines = ["alpha\n", "beta\n", "gamma\n"]
for index, value in enumerate(lines):
lines[index] = value.rstrip("\r\n")
print(lines)
For more loop patterns, see PythonPool’s Python enumerate() article. If you are building a new list and adding items, extend vs append, copy list, and list pop() are useful follow-ups.

Which Method Should You Use?
- Use
rstrip("\r\n")for line endings from files. - Use
strip()when surrounding whitespace should be removed too. - Use
removesuffix("\n")when only one final newline should be removed. - Use
replace()when newline characters can appear inside each string. - Use
re.sub()for patterns with repeated or mixed line breaks. - Use
enumerate()when the original list must be updated in place.
FAQs
Does strip() remove newline characters?
Yes. strip() removes leading and trailing whitespace, including newline characters. It also removes spaces and tabs, so use rstrip("\n") if you only want trailing newlines.
How do I remove newlines after readlines()?
Use [line.rstrip("\r\n") for line in lines]. This handles both Unix and Windows line endings.
Should I mutate the original list?
Create a new cleaned list unless another part of your program needs the same list object updated in place. In-place updates are useful, but they make side effects easier to miss.

Target Line Endings Only
A list created from file reads often contains a trailing newline on every item. rstrip(‘\r\n’) handles LF and CRLF endings without deleting intentional spaces or tabs that may be part of the value.
lines = ["alpha\n", "beta\r\n", " gamma \n"]
cleaned = [line.rstrip("\r\n") for line in lines]
print(cleaned)
Use splitlines() For A Text Blob
When the source is one complete string rather than an existing list, splitlines() is usually the clearest operation. It recognizes common line boundaries and does not leave the newline characters in the returned lines. Do not filter empty strings unless blank lines are not meaningful.
text = "alpha\r\nbeta\n\ngamma"
lines = text.splitlines()
print(lines)
Avoid Accidental Data Loss
strip() removes whitespace from both ends, including spaces that may be significant in a fixed-width record or user input. If you need to remove a single known suffix, use removesuffix() or a precise check so the transformation communicates the contract.
value = " padded value \n"
print(value.rstrip("\r\n"))
print(value.strip())
print(value.removesuffix("\n"))
For related file-reading choices, compare Python’s splitlines() and rstrip() behavior against the format you receive.
For neighboring text workflows, compare newline matching with regular expressions, printing without a newline, and reading files line by line.
Frequently Asked Questions
How do I remove newline characters from every list item?
Use a list comprehension with item.rstrip(‘\r\n’) when each item may end with a CR, LF, or CRLF sequence.
What is the difference between strip() and rstrip(‘\r\n’)?
strip() removes whitespace from both ends, while rstrip(‘\r\n’) targets only line-ending characters at the right edge.
Can splitlines() remove newlines for me?
Yes. If you are converting a whole text blob into lines, str.splitlines() is usually cleaner because it recognizes common line boundaries.
How do I preserve blank lines?
Choose the operation based on the data contract; splitlines() and filtering empty strings can remove information, so do not filter unless blank lines are unwanted.