also preudocode:
Code: Alles auswählen
l=[1,2,3,4]
l=l.replace([2,3], "X")
print l
[1,"X",4]
Code: Alles auswählen
l=[1,2,3,4]
l=l.replace([2,3], "X")
print l
[1,"X",4]
Code: Alles auswählen
[("X" if x == (2, 3) else x) for (x, y) in zip(l, l[1:])]
Code: Alles auswählen
[("X" if (x, y) == (2, 3) else x) for (x, y) in zip(l, l[1:])]
Code: Alles auswählen
[("X" if elem == (2, 3) else elem[0]) for elem in zip(l, l[1:])]
Code: Alles auswählen
def list_replace_tuples(l, src, dst):
"""
>>> list_replace_tuples([1,2,3,4], (2,3), "X")
[1, 'X', 4]
>>> list_replace_tuples([1,2,3,4,5], (4,5), "X")
[1, 2, 3, 'X']
>>> list_replace_tuples([1,2,3,4,5], (1,2), "X")
['X', 3, 4, 5]
>>> list_replace_tuples([1,2,3,3,3,4,5], (3,3), "X")
[1, 2, 'X', 'X', 3, 4, 5]
"""
assert len(src)==2
return [
(dst if elem == src else elem[0]) for elem in zip(l, l[1:])
]
if __name__ == "__main__":
import doctest
print doctest.testmod()
Code: Alles auswählen
**********************************************************************
File "/media/servershare/workspace/DragonPy/dragonlib/core/test.py", line 3, in __main__.list_replace_tuples
Failed example:
list_replace_tuples([1,2,3,4], (2,3), "X")
Expected:
[1, 'X', 4]
Got:
[2, 'X', 4]
**********************************************************************
File "/media/servershare/workspace/DragonPy/dragonlib/core/test.py", line 6, in __main__.list_replace_tuples
Failed example:
list_replace_tuples([1,2,3,4,5], (4,5), "X")
Expected:
[1, 2, 3, 'X']
Got:
[2, 3, 4, 'X']
**********************************************************************
File "/media/servershare/workspace/DragonPy/dragonlib/core/test.py", line 12, in __main__.list_replace_tuples
Failed example:
list_replace_tuples([1,2,3,3,3,4,5], (3,3), "X")
Expected:
[1, 2, 'X', 'X', 3, 4, 5]
Got:
[2, 3, 'X', 'X', 4, 5]
**********************************************************************
1 items had failures:
3 of 4 in __main__.list_replace_tuples
***Test Failed*** 3 failures.
TestResults(failed=3, attempted=4)
Code: Alles auswählen
def replace(l, old, new):
index = 0
while index < len(l):
element = l[index:index+len(old)]
if element == old:
yield new
index += len(old)
else:
yield l[index]
index += 1
Code: Alles auswählen
def list_replace_tuples(l, src, dst):
"""
>>> list_replace_tuples([1,2,3,4], (2,3), "X")
[1, 'X', 4]
>>> list_replace_tuples([1,2,3], (2,), "X")
[1, 'X', 3]
>>> list_replace_tuples([1,2,3,4,5], (2,3,4), "X")
[1, 'X', 5]
>>> list_replace_tuples([1,2,3,4,5], (4,5), "X")
[1, 2, 3, 'X']
>>> list_replace_tuples([1,2,3,4,5], (1,2), "X")
['X', 3, 4, 5]
>>> list_replace_tuples([1,2,3,3,3,4,5], (3,3), "X")
[1, 2, 'X', 3, 4, 5]
"""
result=[]
src=list(src)
src_len=len(src)
index = 0
while index < len(l):
element = l[index:index+src_len]
#print element, src
if element == src:
result += dst
index += src_len
else:
result.append(l[index])
index += 1
return result
if __name__ == "__main__":
import doctest
print doctest.testmod()
Code: Alles auswählen
def iter_replace(iterable, needle, replacement):
"""
>>> list(iter_replace([1,2,3,4], (2,3), "X"))
[1, 'X', 4]
>>> list(iter_replace([1,2,3], (2,), "X"))
[1, 'X', 3]
>>> list(iter_replace([1,2,3,4,5], (2,3,4), "X"))
[1, 'X', 5]
>>> list(iter_replace([1,2,3,4,5], (4,5), "X"))
[1, 2, 3, 'X']
>>> list(iter_replace([1,2,3,4,5], (1,2), "X"))
['X', 3, 4, 5]
>>> list(iter_replace([1,2,3,3,3,4,5], (3,3), "X"))
[1, 2, 'X', 3, 4, 5]
"""
picked = []
for item in iterable:
if item == needle[len(picked)]:
picked.append(item)
if len(picked) == len(needle):
del picked[:]
yield replacement
else:
for picked_item in picked:
yield picked_item
del picked[:]
yield item
if __name__ == "__main__":
import doctest
print doctest.testmod()
Code: Alles auswählen
>>> list(iter_replace([1,2,2,3,4,5],[2,3], "X"))
[1, 2, 2, 3, 4, 5]
Code: Alles auswählen
>>> list(iter_replace([1,2,2,3,4,5],[2,3], "X"))
[1, 2, 'X', 4, 5]
Code: Alles auswählen
from collections import deque
from itertools import islice
def iter_replace(iterable, needle, replacement):
"""
>>> list(iter_replace([1,2,3,4], (2,3), "X"))
[1, 'X', 4]
>>> list(iter_replace([1,2,3], (2,), "X"))
[1, 'X', 3]
>>> list(iter_replace([1,2,3,4,5], (2,3,4), "X"))
[1, 'X', 5]
>>> list(iter_replace([1,2,3,4,5], (4,5), "X"))
[1, 2, 3, 'X']
>>> list(iter_replace([1,2,3,4,5], (1,2), "X"))
['X', 3, 4, 5]
>>> list(iter_replace([1,2,3,3,3,4,5], (3,3), "X"))
[1, 2, 'X', 3, 4, 5]
>>> list(iter_replace([1,2,2,3,4,5], (2,3), "X"))
[1, 2, 'X', 4, 5]
"""
iterable = iter(iterable)
needle = deque(needle)
picked = deque(islice(iterable, len(needle)-1))
for item in iterable:
picked.append(item)
if needle == picked:
yield replacement
picked = deque(islice(iterable, len(needle)-1))
else:
yield picked.popleft()
for item in picked:
yield item
Code: Alles auswählen
def iter_replace(iterable, needle, replacement):
"""
>>> list(iter_replace([1,2,3,4], (2,3), "X"))
[1, 'X', 4]
>>> list(iter_replace([1,2,3], (2,), "X"))
[1, 'X', 3]
>>> list(iter_replace([1,2,3,4,5], (2,3,4), "X"))
[1, 'X', 5]
>>> list(iter_replace([1,2,3,4,5], (4,5), "X"))
[1, 2, 3, 'X']
>>> list(iter_replace([1,2,3,4,5], (1,2), "X"))
['X', 3, 4, 5]
>>> list(iter_replace([1,2,3,3,3,4,5], (3,3), "X"))
[1, 2, 'X', 3, 4, 5]
>>> list(iter_replace([1,2,2,3,4,5], (2,3), "X"))
[1, 2, 'X', 4, 5]
"""
picked = []
for item in iterable:
if item == needle[len(picked)]:
picked.append(item)
if len(picked) == len(needle):
del picked[:]
yield replacement
elif len(picked) == 1 and item == picked[0]:
yield item
else:
for picked_item in picked:
yield picked_item
del picked[:]
yield item
if __name__ == "__main__":
import doctest
print doctest.testmod()
Code: Alles auswählen
>>> list(iter_replace([1,2,3,2,3,2,3,3,4,5], (2,3,2,3,3), 'X'))
[1, 2, 3, 2, 3, 2, 3, 3, 4, 5]
Code: Alles auswählen
>>> list(iter_replace([1,2,3,2,3,2,3,3,4,5], (2,3,2,3,3), 'X'))
[1, 2, 3, 'X', 4, 5]
Code: Alles auswählen
s="12345"
print s.replace("3","X")
"12X45"
l=[1,2,3,4,5]
print l.replace(3,"X")
[1,2,"X",4,5]
print l.replace([2,3,4],"Y")
[1,"Y",5]
print l.replace([2,3,4],["X","Y"])
[1,"X","Y",5]
Code: Alles auswählen
class List2(list):
def replace(self, src, dst):
"""
>>> l=List2([1,2,3,4])
>>> l
[1, 2, 3, 4]
>>> l.replace((2,3), "X")
[1, 'X', 4]
>>> l=List2([1,2,3,4])
>>> l.replace([2], "X")
[1, 'X', 3, 4]
>>> l=List2([1,2,3,4,5])
>>> l.replace([2,3,4], "X")
[1, 'X', 5]
>>> l=List2([1,2,3,4,5])
>>> l.replace((4,5), "X")
[1, 2, 3, 'X']
>>> l=List2([1,2,3,4,5])
>>> l.replace((1,2), "X")
['X', 3, 4, 5]
>>> l=List2([1,2,3,3,3,4,5])
>>> l.replace((3,3), "X")
[1, 2, 'X', 3, 4, 5]
"""
result=[]
src=list(src)
src_len=len(src)
index = 0
while index < len(self):
element = self[index:index+src_len]
#print element, src
if element == src:
result += dst
index += src_len
else:
result.append(self[index])
index += 1
return result
if __name__ == "__main__":
import doctest
print doctest.testmod(verbose=0)
print " --- END --- "