有15个元素的列表。从这个列表中,我想每次迭代x。 item,以及item x-1和x + 1并生成一个新列表。
示例:在4.迭代中,我位于第4个项目,我想获得第3个和第5个项目并生成一个新列表。 newlist = [3,4,5]在下一个项目5的迭代中,我要获取项目4和6,并生成一个新列表,依此类推。
如果该项目在第一个项目上进行迭代,则应该仅取下一个项目和他自己。如果该项目是列表中的最后一个项目,则应仅接受前一个项目及其本人。
短:如果在x处进行迭代,则将x-1,x和x + 1移至新列表。在下一次迭代之前,清除列表,如list.clear()
我的代码尝试,(但我认为可以更好):
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = []
for item in list_:
print("POS:", list_.index(item))
if list_.index(item) == 0:
new_list.append(list_[list_.index(item)])
new_list.append(list_[list_.index(item+1)])
print(new_list)
new_list.clear()
print("*"*55)
elif list_.index(item) >= 1 and list_.index(item) < len(list_)-1:
new_list.append(list_[list_.index(item)-1])
new_list.append(list_[list_.index(item)])
new_list.append(list_[list_.index(item)+1])
print(new_list)
new_list.clear()
print("*"*55)
elif list_.index(item) <= len(list_):
new_list.append(list_[list_.index(item)-1])
new_list.append(list_[list_.index(item)])
print(new_list)
new_list.clear()
print("*"*55)
输出:
POS: 0
[0, 1]
*******************************************************
POS: 1
[0, 1, 2]
*******************************************************
POS: 2
[1, 2, 3]
*******************************************************
POS: 3
[2, 3, 4]
*******************************************************
POS: 4
[3, 4, 5]
*******************************************************
POS: 5
[4, 5, 6]
*******************************************************
POS: 6
[5, 6, 7]
*******************************************************
POS: 7
[6, 7, 8]
*******************************************************
POS: 8
[7, 8, 9]
*******************************************************
POS: 9
[8, 9, 10]
*******************************************************
POS: 10
[9, 10]
*******************************************************
欢迎一些更好的方法或更有效的算法。
答案 0 :(得分:2)
您可以使用列表切片来实现:
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = [list_[max(0, i-1):i+2] for i in range(len(list_))]
给你
[[0, 1] [0, 1, 2] [1, 2, 3] [2, 3, 4] [3, 4, 5] [4, 5, 6] [5, 6, 7] [6, 7, 8] [7, 8, 9] [8, 9, 10] [9, 10]]
或者,如果您真的想在不存储到新列表的情况下对其进行迭代(即与您的代码等效):
list_ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(list_)):
new_list = list_[max(0, i-1):i+2]
print(new_list)
# no need to clear it as it will be overwritten on the next loop anyway
print("*" * 55)