0

我正在尝试制作两个此类列表:

list_numbers = [1,2,3,4,5,6,7,8,9,10,11,12]
list_letters= ["onetothree", "fourtosix", "seventonine", "tentotwelve"]

进入

list_both= ["onetothree",1,2,3,"fourtosix",4,5,6...]

这只是描述我的问题的一种方式。我需要对 list_numbers 和 list_letters 中的所有元素执行此操作。list_numbers 中的一个或多个元素将始终可以被 list_letters 中的元素数量整除,因此无需担心“歪曲数据”。

在搜索了三个小时后,尝试了许多不同类型的“for”和“while”循环,只得到了 python 2.x 问题、糟糕的结果和语法错误,我想我可能应该发布这个问题。

4

2 回答 2

0

哈克,但它会完成工作

>>> list_numbers = [1,2,3,4,5,6,7,8,9,10,11,12]
>>> list_letters= ["onetothree", "fourtosix", "seventonine", "tentotwelve"]
>>> list(itertools.chain.from_iterable(zip(list_letters, *zip(*[list_numbers[i:i+3] for i in range(0, len(list_numbers), 3)]))))
['onetothree', 1, 2, 3, 'fourtosix', 4, 5, 6, 'seventonine', 7, 8, 9, 'tentotwelve', 10, 11, 12]

或者,更清洁的版本:

>>> answer = []
>>> i = 0
>>> for letter in list_letters:
...     answer.append(letter)
...     for j in range(3):
...         answer.append(list_numbers[i+j])
...     i += j+1
... 
>>> answer
['onetothree', 1, 2, 3, 'fourtosix', 4, 5, 6, 'seventonine', 7, 8, 9, 'tentotwelve', 10, 11, 12]

当然,如果你没有足够多的条目list_numbers,你这会烧死你

于 2013-08-02T00:10:36.897 回答
0

试试这个:

list_numbers = [1,2,3,4,5,6,7,8,9,10,11,12]
list_letters= ["onetothree", "fourtosix", "seventonine", "tentotwelve"]
list_both=[]
c=1
for n in range(len(list_letters)):
        list_both.append(list_letters[n])
        list_both[c+n:c+n]=list_numbers[c-1:c+2]
        c+=3
print(list_both)
于 2013-08-02T07:24:19.303 回答