在您的情况下,您可能只需要检查索引是否比序列长度长:
list1 = [1, 2, -3, 4, 7]
list2 = [4, -6, 3, -1]
final_list = []
for index in range(max(len(list1), len(list2))):
if index < len(list1):
if list1[index] < 0:
final_list.insert(0, list1[index])
elif list1[index] > 0:
final_list.insert(len(final_list), list1[index])
if index < len(list2):
if list2[index] < 0:
final_list.insert(0, list2[index])
elif list2[index] > 0:
final_list.insert(len(final_list), list2[index])
print(final_list)
或者使用
itertools.zip_longest
(在 Python 2.x 中为
itertools.izip_longest
),并检查一些填充值(即
None
)。
import itertools
list1 = [1, 2, -3, 4, 7]
list2 = [4, -6, 3, -1]
final_list = []
for item1, item2 in itertools.zip_longest(list1, list2, fillvalue=None):
if item1 is None:
pass
elif item1 < 0:
final_list.insert(0, item1)
elif item1 > 0:
final_list.append(item1)
if item2 is None:
pass
elif item2 < 0:
final_list.insert(0, item2)
elif item2 > 0:
final_list.append(item2)
然而,你的方法在项目等于0时会跳过,这可能是一个疏忽,但你应该检查它是否正确地处理了零。
另外,你经常使用插入。最后的elif可以改用final_list.append(item1)(或item2),就像我在第二个例子中所做的那样。
在这种情况下,对于item1和item2的处理是相同的,因此你可以使用另一个循环。
import itertools
list1 = [1, 2, -3, 4, 7]
list2 = [4, -6, 3, -1]
final_list = []
for items in itertools.zip_longest(list1, list2, fillvalue=None):
for item in items:
if item is None:
pass
elif item < 0:
final_list.insert(0, item)
elif item > 0:
final_list.append(item)
for item1, item2 in itertools.zip_longest(list1, list2)
? - Chris_Randsitertools
中的zip_longest
。 - kuro