Add list and iterator to create a new list

I tried:

a_list = [1,2,3]
b_list = [4,5]
...

call_function(a_list + iter(b_list))  # TypeError

Is there any better code than this:

a_list = [1,2,3]
b_list = [4,5]
...

new_list = a_list[:]
new_list += iter(b_list)  # no TypeError?
call_function(new_list)

Consider any iterator I use isliceinstead iter.

+4
source share
4 answers

In , you can use iterative unpacking:

call_function([*a_list, *iter(b_list)])

This works with:

>>> [*a_list, *iter(b_list)]
[1, 2, 3, 4, 5]

Note the asterisk ( *) in front of a_listand iter(b_list). Moreover, it a_listshould only be a finite iterative iterator. That way, you can simply create a list that combines the final iterations together.

+4
source

itertools.chain :

from itertools import chain

new_list = list(chain(a_list, iter(b_list))) 
print(new_list)
# [1, 2, 3, 4, 5]
+3

. , :

new_list += iter(b_list)

, list.__iadd__, .

+1

__iadd__(), += ( ).

call_function(a_list.__iadd__(iter(b_list)))

>>> a_list.__iadd__(iter(b_list))
[1, 2, 3, 4, 5]

, , . :)

, new_list, list_a, .

a_list[:].__iadd__(iter(b_list))
+1

Source: https://habr.com/ru/post/1685591/


All Articles