有沒有更好的方法來做到這一點,這段代碼正在作業,但我覺得有更好的方法來做到這一點
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
avilable=[j for j in range(len(mainlist) len(skiplist) 1) if j not in skiplist]
i=avilable[0]
for letter in mainlist:
print (letter," is ",i)
i= avilable[avilable.index(i) 1]
result
a is 0
b is 1
c is 2
d is 3
e is 5
f is 7
i is 8
j is 9
k is 10
uj5u.com熱心網友回復:
既然你已經想出了如何構建available你可以只有zip兩個:
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
available= [j for j in range(len(mainlist) len(skiplist)) if j not in skiplist]
for i, j in zip(mainlist, available):
print(f"{i} is {j}")
另一種選擇可能是使用計數器來構建j你去的值:
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
j = 0
for i in mainlist:
while j in skiplist:
j = 1
print(f"{i} is {j}")
j = 1
另一種選擇是使用類似itertools.countand的東西構建生成器filter:
from itertools import count
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
available = filter(lambda j: j not in skiplist, count())
for i, j in zip(mainlist, available):
print(f"{i} is {j}")
uj5u.com熱心網友回復:
沒有那個額外的串列:
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
i = 0
for letter in mainlist:
while i in skiplist:
i = 1
print(letter, ' is ', i)
i = 1
或者一個奇特的itertools解決方案,也使用集合而不是串列,如果跳過串列很大,這將更有效:
from itertools import count, filterfalse
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
numbers = filterfalse(set(skiplist).__contains__, count())
for letter, number in zip(mainlist, numbers):
print(letter, ' is ', number)
uj5u.com熱心網友回復:
您可以使用enumerate同時獲取索引和值。單個 for 回圈足以解決問題。
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
skipAmout = 0
for i, letter in enumerate(mainlist):
if i in skiplist:
skipAmout =1
print (letter," is ",i skipAmout)
uj5u.com熱心網友回復:
mainlist = ['a','b','c','d','e','f','i','j','k']
skiplist = [4,6]
i=0
for letter in mainlist:
if i in skiplist:
i =1
print (letter," is ",i)
i =1
擺脫不必要的串列使其變得更加簡單
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/429384.html
