我正在创建一个小程序,允许用户在列表中输入一个字符串到他们选择的索引中。如果用户指定将其字符串输入索引2,并且已有值,则程序应删除当前值并将其替换为新值。如果用户指定的索引不存在,程序应将索引插入列表中。但是,我不知道如何测试索引是否存在而不会抛出错误。 这是我的具体代码:
if myDict["List"][user_index] is None:
myDict["List"].insert(user_index, user_string)
else:
myDict["List"][user_index] = user_string
检查myDict [“List”] [user_index]是否存在时出现此错误:
IndexError: list index out of range
答案 0 :(得分:1)
使用
if index >= 0 and index < len(list):
do_someting
但它没有优化。
编辑: 使用dict(),它变为:
if user_index not in myDict["List"]:
myDict["List"].update(user_index, user_string)
else:
myDict["List"][user_index] = user_string
答案 1 :(得分:0)
如果您使myDict["List"]
成为dict()
,则不必担心检查是否存在,只需更改它:
myDict["List"][user_index] = user_string
如果索引不存在,它将在字典中创建一个新条目,否则它将更新现有条目。
它将作为一个&#34;稀疏&#34;矢量。
但是,如果稍后您需要将dict
转换为list
,则可以使用此代码:
myDict["List"] = [myDict["List"].get(k) for k in range(1+max(myDict["List"].keys()))]
示例:
>>> d={1: 'foo', 4: 'bar'}
>>> [d.get(k) for k in range(1+max(d.keys()))]
[None, 'foo', None, None, 'bar']
答案 2 :(得分:0)
您的代码似乎使用的是字典而不是列表。找出字典中是否存在给定键的更好方法就是这样......
var $hideOverlay = $("#hideOverlay").hide();
$("#show-form").click(function(e){
$hideOverlay.toggleClass("formVisible");
//Prevent default behavior for links and buttons
e.preventDefault();
});
这假设您已经知道myDict包含“List”键的条目。