我在Python中混合了两个列表,虽然我知道有类似的问题,但我需要以某种方式处理它.
我有两个列表,它们的长度可能相同,也可能不同.我需要交织两者并使用填充物作为较短的列表,但填充物必须在较短列表中的任何值之前.
这就是我目前拥有的:
def mix(a, b):
fill='spam'
if len(a) > len(b):
d = len(a) - len(b)
while d:
b.insert(0, fill)
d-=1
if len(a) < len(b):
d = len(b) - len(a)
while d:
a.insert(0, fill)
d-=1
n = zip(a, b)
mixed = [item for sub in n for item in sub]
return mixed
Run Code Online (Sandbox Code Playgroud)
例:
>>> mix([1, 2 ,3], ['A', 'B', 'C', 'D', 'E', 'F'])
['spam', 'A', 'spam', 'B', 'spam', 'C', 1, 'D', 2, 'E', 3, 'F']
Run Code Online (Sandbox Code Playgroud)
所以代码可以工作,但它似乎不是一个好方法.有没有更好的办法?
如果要将一个元素粘贴到列表中的两个元素上,则可以利用切片.
这是一个可能的实现:
In [39]: l1 = [1,2,3]
...: l2 = ['A', 'B', 'C', 'D', 'E', 'F']
...: fill = 'spam'
...:
In [40]: l = 2 * max(len(l1), len(l2)) # final length
...: mixed = [fill] * l # result is initialized with the filler
...: mixed[l-2*len(l1)::2] = l1 # paste l1
...: mixed[l-2*len(l2)+1::2] = l2 # paste l2
...: mixed
...:
Out[40]: ['spam', 'A', 'spam', 'B', 'spam', 'C', 1, 'D', 2, 'E', 3, 'F']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |