Python 替换嵌套列表中特定列表中的值
我正在为一家蜡笔制造商写一个程序。他们有4个包在库存中(目前这是调试的良好起点)。我在一份清单中表明:Python 替换嵌套列表中特定列表中的值,python,list,nested-lists,Python,List,Nested Lists,我正在为一家蜡笔制造商写一个程序。他们有4个包在库存中(目前这是调试的良好起点)。我在一份清单中表明: colors=[['pink','green','blue'],['blue','green','red'],['pink',blue','yellow'],['orange','pink','yellow']] 我想改变两个包中的蜡笔的颜色,其中绿色是在中间,得到更多颜色的包装。 首先,我发现所有中间有绿色的包装: packsfound = [] for pack in colors:
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)
问题是它只会遍历第一个列表,并替换第一个绿色。然后程序说绿色不在列表中,并且不会取代第二个绿色:
packs with one: [['pink', 'green', 'blue'], ['blue', 'green', 'red']]
replace at: 1
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'green', 'red']]
'green' is not in list
[['pink', 'blue', 'yellow'], ['orange', 'pink', 'yellow'], ['pink', 'yellow', 'blue'], ['blue', 'green', 'red']]
我尝试过很多方法,比如移动try和except,将替换行移入和移出循环,添加break和pass,但都不起作用。与其更改列表中的元素,不如创建一个新列表并返回它。使用简单的
列表理解
和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']]
请注意:这是考虑到您只想将中间的中的颜色替换为黄色。否则,需要将所有“绿色”元素替换为黄色
,请使用“替换”
请注意:这是一组颜色中奇数的情况。否则,偶数的中间是两个元素,因此相应地更改代码。替换循环中存在错误。放置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
我相信你的更换步骤才是问题所在。当您试图枚举嵌套列表时,似乎犯了一个错误。我不知道您为什么要在已经使用.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']]
嘿。。。与@Toothless相同的响应。打12秒!除息的