Replace values in list using Python
Build a new list with a list comprehension:
new_items = [x if x % 2 else None for x in items]
You can modify the original list in-place if you want, but it doesn't actually save time:
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for index, item in enumerate(items):
if not (item % 2):
items[index] = None
Here are (Python 3.6.3) timings demonstrating the non-timesave:
In [1]: %%timeit
...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
...: for index, item in enumerate(items):
...: if not (item % 2):
...: items[index] = None
...:
1.06 µs ± 33.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [2]: %%timeit
...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
...: new_items = [x if x % 2 else None for x in items]
...:
891 ns ± 13.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
And Python 2.7.6 timings:
In [1]: %%timeit
...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
...: for index, item in enumerate(items):
...: if not (item % 2):
...: items[index] = None
...:
1000000 loops, best of 3: 1.27 µs per loop
In [2]: %%timeit
...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
...: new_items = [x if x % 2 else None for x in items]
...:
1000000 loops, best of 3: 1.14 µs per loop
Finding and replacing elements in a list
You can use the built-in enumerate
to get both index and value while iterating the list. Then, use the value to test for a condition and the index to replace that value in the original list:
>>> a = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for i, n in enumerate(a):
... if n == 1:
... a[i] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
How to replace values of a list with values of another list based on index
Use __getitem__
with map
which is quite faster.
list(map(d.__getitem__, a))
Output >> ['d', 'c', 'i', 'h', 'a']
Find and replace string values in list
words = [w.replace('[br]', '<br />') for w in words]
These are called List Comprehensions.
Replace elements in lists based on indexes python
Try this:
rest=[5, 7, 11, 4]
b=[21, 22, 33, 31, 23, 15, 19, 13, 6]
last=[33, 19, 40, 21, 31, 22, 6, 15, 13, 23]
for i, l in enumerate(last):
if l in b:
if b.index(l) < len(rest):
last[i] = rest[b.index(l)]
print(last)
Replace values in a list based on condition of previous value
Starting in python 3.8 you now have the walrus operator :=
which can assign values as part of an expression and works in list comprehensions. You just need to decide what the first value will be if the list starts with 0
since there is no previous value:
alist = [1, 1, 2, 1, 0, 0, 1, 0, 2, 0, 0]
j = 0
[j:= i if i else j for i in alist]
# [1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2]
Related Topics
Pandas Add Column to Groupby Dataframe
How to Activate an Anaconda Environment
Transpose Column to Row with Spark
Python Script to Do Something at the Same Time Every Day
Pip Install Access Denied on Windows
Environment Variable Differences When Using Paramiko
Converting JSON String to Dictionary Not List
Why Does Using 'Arg=None' Fix Python's Mutable Default Argument Issue
Logging Uncaught Exceptions in Python
Why Is Equivalent Python Code So Much Slower
Negative Integer Division Surprising Result
Extracting Text from a PDF File Using PDFminer in Python
Python: Get a Frequency Count Based on Two Columns (Variables) in Pandas Dataframe Some Row Appers