Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
iterator from an iterator
#1
in a function i have an iterator. i'd like to create a new iterator that wraps around that first iterator and modifies each data item. is there a way to do this without coding a generator? an example use case starts with a iterator that yields bytes items. i want to make (and return) an iterator that yields the same data transparently converted to str items.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#2
You can write your own class to decorate behavior of an iterator, e.g.

x = [1,2,3]
class IterDecor:
    def __iter__(self):
        return self

    def __next__(self):
        value = next(self._iterator)
        return str(value * value)
    
    def __call__(self, iterator):
        self._iterator = iterator
        return self

c = IterDecor()
x = c(iter(x))  # decorate behavior of the default iterator `iter(x)`

for z in x:
    print(z, type(z))
Output:
1 <class 'str'> 4 <class 'str'> 9 <class 'str'>
Reply
#3
You can also use a generator expression
>>> seq = [b'a', b'a', b'c']
>>> seq2 = (x.decode() for x in seq)
>>> for x in seq2:
...     print(x)
... 
a
a
c
An alternative is to use map()
>>> seq = [b'a', b'a', b'c']
>>> seq2 = map(bytes.decode, seq)
>>> for x in seq2:
...     print(x)
... 
a
a
c
Reply
#4
this is a function that needs to return the modified iterator. should it just return the expression?
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  prime numbers with iterator and generator cametan_001 8 1,773 Dec-17-2022, 02:41 PM
Last Post: cametan_001
  resetting an iterator to full Skaperen 7 6,816 Feb-20-2022, 11:11 PM
Last Post: Skaperen
  popping an iterator Skaperen 11 3,602 Oct-03-2021, 05:08 PM
Last Post: Skaperen
  q re glob.iglob iterator and close jimr 2 2,180 Aug-23-2021, 10:14 PM
Last Post: perfringo
  Problem with an iterator grimm1111 9 4,219 Feb-06-2021, 09:22 PM
Last Post: grimm1111
  Multi-class iterator Pedroski55 2 2,337 Jan-02-2021, 12:29 AM
Last Post: Pedroski55
  is a str object a valid iterator? Skaperen 6 5,547 Jan-27-2020, 08:44 PM
Last Post: Skaperen
  discard one from an iterator Skaperen 1 1,964 Dec-29-2019, 11:02 PM
Last Post: ichabod801
  how do i pass duplicates in my range iterator? pseudo 3 2,297 Dec-18-2019, 03:01 PM
Last Post: ichabod801
  looking for a sprcil iterator Skaperen 7 3,299 Jun-13-2019, 01:40 AM
Last Post: Clunk_Head

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020