写下面的内容似乎很愚蠢:
L = []
if x in L:
L[x] = something
else:
L[x] = something_else
这不是两次执行x的查找吗?我尝试使用index(),但是在找不到值时会出错。
理想情况下我想说:
if x is in L, save that index and:
...
我可以理解这可能是一个初学者的python习语,但似乎相当不可搜索。感谢。
答案 0 :(得分:2)
您的意思是想要setdefault(key[, default])
a = {}
a['foo'] # KeyError
a.setdefault('foo', 'bar') # key not exist, set a['foo'] = 'bar'
a.setdefault('foo', 'x') # key exist, return 'bar'
答案 1 :(得分:2)
另一个选择是try / except:
d = {}
try:
d[x] = something_else
except KeyError:
d[x] = something
与您的代码相同。
编辑:好的,快速移动的目标。列表的相同习惯用法,不同的异常(IndexError)。
答案 2 :(得分:1)
如果你有一个列表,你可以使用index
,如果它被抛出则捕获ValueError
:
yourList = []
try:
i = yourList.index(x)
except ValueError:
i = None
然后你可以测试i的值:
if i is not None:
# Do things if the item was found.
答案 3 :(得分:0)
我认为你的问题很多,因为你在dict和list之间混合了你的语法。 如果:
L = [] # L is synonym for list and [] (braces) used to create list()
在这里,您要查找列表中的值,不键或dict中的值:
if x in L:
然后你使用 x 看似有意作为键,但是在列表中它是一个int()索引并且执行if x in L:
不会测试索引是否在L中但是如果值在L:
L[x]=value
因此,如果您打算查看某个值是否在L
列表中,请执行以下操作:
L = [] # that's a list and empty; and x will NEVER be in an empty list.
if x in L: # that looks for value in list; not index in list
# to test for an index in a list do if len(L)>=x
idx = L.index(x)
L[idx] = something # that makes L[index]=value not L[key]=value
else:
# x is not in L so you either append it or append something_else
L.append(x)
如果您使用:
L[x] = something
与if x in L:
一起使用只有这些值的列表才有意义:L=[ 0, 1, 2, 3, 4, ...]
或L=[ 1.0, 2.0, 3.0, ...]
但我会提出这个:
L = []
L.extend(my_iterable)
coder0 = 'farr'
coder1 = 'Mark Byers'
if coder0 not in L:
L.append(coder1)
奇怪的逻辑