我正在为蜡笔制造商编写一个程序。它们有4个库存(现在因为它是调试的良好起点)。我已在列表中显示:
function SortByActionPriority($a, $b) {
return $a[priority] > $b[priority] ? 1 : -1;
}
我想改变两个包装中蜡笔的颜色,绿色在中间,以获得更多种颜色的包装。 首先,我发现中间的所有包装都是绿色的:
colors=[['pink','green','blue'],['blue','green','red'],['pink',blue','yellow'],['orange','pink','yellow']]
然后我删除了我从库存(颜色)中选择的包装,以便可以修改它们并稍后放回。
packsfound = []
for pack in colors:
if pack[1]=="green":
packsfound.append(pack)
print("packs with one:",packsfound)
然后我做了替换:
try:
for pack in packsfound:
colors.remove(pack)
except Exception as e:
print(e)
pass
然后我将修改后的列表追溯到颜色,这样它们就是新的库存
for pack in packsfound:
try:
for i, color in enumerate(packsfound):
position=color.index("green")
print("replace at:",position)
break
pack[position]="yellow"
print("replaced rows:",packsfound)
except Exception as e:
print(e)
pass
问题是它只通过第一个列表并替换第一个绿色。然后程序说绿色不在列表中并且不替换第二个绿色:
try:
for pack in packsfound:
colors.append(pack)
except Exception as e:
print(e)
pass
print(colors)
我尝试过很多东西,例如移动try和except,以及将替换线移入和移出循环,添加break和pass但是没有任何效果。
答案 0 :(得分:1)
替换循环有错误。放置break语句的方式只允许循环的一次迭代。你可以使用这个循环:
for pack in packsfound:
try:
position = pack.index('green')
print("replace at:",position)
pack[position]="yellow"
print("replaced rows:",packsfound)
except Exception as e:
print(e)
pass
答案 1 :(得分:0)
不是更改列表中的元素,而是更容易构建新列表并返回该列表。将简单list comprehension
与if/else
:
>>> mid = int( len(colors[0])/2 )
>>> [ color[:mid]+['yellow']+color[mid+1:] if color[mid]=='green' else color for color in colors ]
=> [['pink', 'yellow', 'blue'], ['blue', 'yellow', 'red'], ['pink', 'blue', 'yellow'], ['orange', 'pink', 'yellow']]
请注意OP: 这是考虑您只想将green
中的middle
颜色替换为yellow
。否则,所有“绿色”元素都需要替换为yellow
,请使用替换。
OP的注意事项: 这是单集中奇数个颜色的情况。否则,偶数的中间是两个元素,因此相应地更改代码。
答案 2 :(得分:0)
我相信您的替换步骤就是问题所在。当您尝试枚举嵌套列表时,您似乎犯了一个错误。我不确定当您使用.index()
获取您正在搜索的颜色值的索引时,为什么要尝试枚举列表。
packsfound = [['pink', 'green', 'blue'], ['blue', 'green', 'red']]
for pack in packsfound:
try:
for color in pack:
position = pack.index('green')
print("replace at: ", position)
break
pack[position] = 'yellow'
print("replaced rows: ", packsfound)
except Exception as e:
print(e)
pass
请原谅我对变量名称的更改。这输出:
replace at: 1
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'green', 'red']]
replace at: 1
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'yellow', 'red']]