python - 我正在尝试编写一个代码来告诉该方向
问题描述
挑战:https ://www.codewars.com/kata/550f22f4d758534c1100025a/train/python
我的尝试:
array=["NORTH","SOUTH","SOUTH","EAST","WEST","NORTH","WEST"]
list=[]
for i in range(len(array)):
if array[i]=="NORTH":
list.append(i)
for item in array:
if item == "SOUTH":
list.append(item)
array.remove(item)
break
array.pop(i)
elif array[i]=="SOUTH":
list.append(i)
for item in array:
if item == "NORTH":
list.append(item)
array.remove(item)
break
array.pop(i)
elif array[i]=="EAST":
list.append(i)
for item in array:
if item == "WEST":
list.append(item)
array.remove(item)
break
array.pop(i)
elif array[i]=="WEST":
list.append(i)
for item in array:
if item == "EAST":
list.append(item)
array.remove(item)
break
array.pop(i)
else:
if array[i]!=None:
print(array)
else:
print(list)
问题是我尝试在终端中运行时显示此错误:
line 5, in <module>
if array[i]=="NORTH":
IndexError: list index out of range
如果你能帮助我解决这个问题并帮助我改进我的代码,那就太好了。
解决方案
与其将结果附加到新列表中,不如更新原始列表。当您的代码在删除值后尝试访问索引时,会发生索引超出范围。当我们需要更新一个列表时,我们需要使用enumerate
而不是使用带有列表长度的 for 循环。
这是我关于挑战的解决方案。这可能不是最好的解决方案,但它通过了所有测试用例:
def dirReduc(arr):
while True:
retry = False
for i, val in enumerate(arr):
if i+1 < len(arr):
if val == "NORTH" and arr[i+1] == "SOUTH":
del arr[i]
del arr[i]
retry = True
break
if val == "SOUTH" and arr[i+1] == "NORTH":
del arr[i]
del arr[i]
retry = True
break
if val == "WEST" and arr[i+1] == "EAST":
del arr[i]
del arr[i]
retry = True
break
if val == "EAST" and arr[i+1] == "WEST":
del arr[i]
del arr[i]
retry = True
break
if retry == False:
break
return arr
解释:
我已经遍历了数组中的所有元素。如果我得到任何可以相互消灭的连续对,我将它们从列表中删除。这样的对是:(NORTH,SOUTH),(SOUTH,NORTH),(EAST,WEST)和(WEST,EAST)。
我继续这个操作,直到列表中没有可移动的对。最后,我返回更新的列表。
参考:
推荐阅读
- android - 如何在后台服务中访问 Android Asset/RAW 文件夹
- ssh - SSH SFTP 采样器
- java - 如何修复 java.lang.RuntimeException:创建扩展解析器类时出错:Jenkins 中出现空错误?
- azure - Luis azure:短语列表功能无助于检测 ml 实体
- javascript - 如何在 jQuery 中拆分多个事件句柄?
- swift - SwiftUI change the layout to split the view into uneven sections
- python - 在 Pandas 中使用 df.apply 或类似方法修改行值的函数
- sql - 在 SQL 查询中找出谁用脏手吃饭
- javascript - 如何在不丢失其方法的情况下将 javascript 对象保存到 mongodb?
- c++ - 使用 unique_ptr 作为我自己的移动构造函数的替代方法是一种好习惯吗?