C
Cyril BAZIN
Hello,
I want to build a function which return values which appear two or
more times in a list:
So, I decided to write a little example which doesn't work:
#l = [1, 7, 3, 4, 3, 2, 1]
#i = iter(l)
#for x in i:
# j = iter(i)
# for y in j:
# if x == y:
# print x
In thinked that the instruction 'j= iter(i)' create a new iterator 'j'
based on 'i' (some kind of clone). I wrote this little test which show
that 'j = iter(i)' is the same as 'j = i' (that makes me sad):
#l = [1, 7, 3, 4, 2]
#i = iter(l)
#j = iter(i)
#k = i
#i, j, k
(<listiterator object at 0x02167B50>, <listiterator object at
0x02167B50>, <listiterator object at 0x02167B50>)
Just in order to test, I wrote these little test:
#l = [1, 7, 3, 4, 2]
#i = iter(l)
#import pickle
#j = pickle.loads(pickle.dumps(i))
Traceback (most recent call last):
File "<input>", line 1, in ?
File "C:\Python24\lib\pickle.py", line 1386, in dumps
Pickler(file, protocol, bin).dump(obj)
File "C:\Python24\lib\pickle.py", line 231, in dump
self.save(obj)
File "C:\Python24\lib\pickle.py", line 313, in save
rv = reduce(self.proto)
File "C:\Python24\lib\copy_reg.py", line 69, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle listiterator objects
#import copy
#j = copy.copy(i)
Traceback (most recent call last):
File "<input>", line 1, in ?
File "C:\Python24\lib\copy.py", line 95, in copy
return _reconstruct(x, rv, 0)
File "C:\Python24\lib\copy.py", line 320, in _reconstruct
y = callable(*args)
File "C:\Python24\lib\copy_reg.py", line 92, in __newobj__
return cls.__new__(cls, *args)
TypeError: object.__new__(listiterator) is not safe, use listiterator.__new__()
So, I would like to know if there is a way to 'clone' a 'listiterator'
object. I know that is possible in Java for example...
If it is impossible, have you better ideas to find duplicate entries
in a list...
Thanks,
Cyril
I want to build a function which return values which appear two or
more times in a list:
So, I decided to write a little example which doesn't work:
#l = [1, 7, 3, 4, 3, 2, 1]
#i = iter(l)
#for x in i:
# j = iter(i)
# for y in j:
# if x == y:
# print x
In thinked that the instruction 'j= iter(i)' create a new iterator 'j'
based on 'i' (some kind of clone). I wrote this little test which show
that 'j = iter(i)' is the same as 'j = i' (that makes me sad):
#l = [1, 7, 3, 4, 2]
#i = iter(l)
#j = iter(i)
#k = i
#i, j, k
(<listiterator object at 0x02167B50>, <listiterator object at
0x02167B50>, <listiterator object at 0x02167B50>)
Just in order to test, I wrote these little test:
#l = [1, 7, 3, 4, 2]
#i = iter(l)
#import pickle
#j = pickle.loads(pickle.dumps(i))
Traceback (most recent call last):
File "<input>", line 1, in ?
File "C:\Python24\lib\pickle.py", line 1386, in dumps
Pickler(file, protocol, bin).dump(obj)
File "C:\Python24\lib\pickle.py", line 231, in dump
self.save(obj)
File "C:\Python24\lib\pickle.py", line 313, in save
rv = reduce(self.proto)
File "C:\Python24\lib\copy_reg.py", line 69, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle listiterator objects
#import copy
#j = copy.copy(i)
Traceback (most recent call last):
File "<input>", line 1, in ?
File "C:\Python24\lib\copy.py", line 95, in copy
return _reconstruct(x, rv, 0)
File "C:\Python24\lib\copy.py", line 320, in _reconstruct
y = callable(*args)
File "C:\Python24\lib\copy_reg.py", line 92, in __newobj__
return cls.__new__(cls, *args)
TypeError: object.__new__(listiterator) is not safe, use listiterator.__new__()
So, I would like to know if there is a way to 'clone' a 'listiterator'
object. I know that is possible in Java for example...
If it is impossible, have you better ideas to find duplicate entries
in a list...
Thanks,
Cyril