duplication in list comprehension - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: duplication in list comprehension (/thread-1749.html) Pages:
1
2
|
duplication in list comprehension - Skaperen - Jan-24-2017 if i have x=['a','b','c','d','e','f'] how can i make duplicates in a list comprehension and get a result like: ['a','a','b','b','c','c','d','d','e','e','f','f'] i tried this and (as expected) it did not work:
RE: duplication in list comprehension - Mekire - Jan-24-2017 Well, like this I guess: x = ['a','b','c','d','e','f'] doubles = [item for pair in zip(x,x) for item in pair] print(doubles)But do you really think that is clearer than this: doubles = [] for item in x: doubles.extend([item]*2) print(doubles)Matter of taste I guess. Honestly not sure which I prefer. Also, this I guess: import itertools x = ['a','b','c','d','e','f'] doubles = list(itertools.chain(*zip(x, x))) print(doubles)Basically it is a list flattening problem. Lots of stuff here: http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python RE: duplication in list comprehension - wavic - Jan-24-2017 In [11]: x = ['a','b','c','d','e','f'] In [12]: x = x*2 In [13]: x Out[13]: ['a', 'b', 'c', 'd', 'e', 'f', 'a', 'b', 'c', 'd', 'e', 'f'] In [14]: x.sort() In [15]: x Out[15]: ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e', 'f', 'f'] RE: duplication in list comprehension - Mekire - Jan-24-2017 That is definitely a way to do it, though if you have a sequence in which relative order matters but sorting would give a different order it might not be what you want. For example: >>> a = [5, 6, 2, 9, 13 ,2] >>> sorted(a*2) [2, 2, 2, 2, 5, 5, 6, 6, 9, 9, 13, 13] >>>Definitely something to consider though. RE: duplication in list comprehension - wavic - Jan-24-2017 Yes, I am aware but that was not the case. Enyway, if there isn't a sequence in the list, this approach is not going to work RE: duplication in list comprehension - wavic - Jan-30-2017 This should work in any case. Also, the list can be doubled, tripled, etcetera. The order doesn't matter. In [1]: from itertools import repeat, tee In [2]: l = list(range(10)) In [3]: l Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [4]: it = tee(l, 2) In [5]: doubled = [] In [6]: for i, j in repeat(range(2), len(l)): ...: doubled.extend([next(it[i]), next(it[j])]) ...: In [7]: doubled Out[7]: [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] RE: duplication in list comprehension - Skaperen - Jan-31-2017 i wanted to do this in a comprehension. but maybe i should not push comprehensions so much, considering this. RE: duplication in list comprehension - wavic - Jan-31-2017 Well, In [3]: [doubled.extend(list(i)) for i in zip(l, l)] Out[3]: [None, None, None, None, None, None, None, None, None, None] In [4]: doubled Out[4]: [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]works but returns None after any iteration. It's basically the same as in the previous post. I am not good with list comprehensions. Yet... Here is a new one. In [88]: [x for i in zip(l, l) if doubled.extend(list(i)) != None] Out[88]: [] In [89]: doubled Out[89]: [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] RE: duplication in list comprehension - micseydel - Jan-31-2017 Please don't use comprehensions for their side effects D= RE: duplication in list comprehension - Skaperen - Feb-02-2017 what side-effects of comprehensions do you see being used here? is making duplicate items a side-effect? |