我正在寻找一个等效的python dictionary.get(key, default)列表.是否有任何一个习惯用语来获取列表的第n个元素或默认值(如果不可用)?
例如,给定一个我希望获得的列表myList myList[0],或者如果myList是一个空列表,则为5 .
谢谢.
我需要一个很好的方法来询问一个数组/矩阵值,但是为越界索引报告一个默认值(0):
如果第二个索引长度是3,b [2] [4]应该返回0,并且
b [-1] [2]
我也检查了这一点:
在Python中获取索引超出范围的默认值,但在我看来它对负索引不起作用 - 因为python总是将数组长度添加到它们(是的? )
我正沿着超载的思路__getitem__,但我只是来蟒蛇1个月前,我不那么熟练...
任何帮助赞赏!
亚历山德罗
使用Python列表
L=[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
我希望L[m] = 0如果m不同0,1,2,3,即:
...
L[-2]=0
L[-1]=0
L[0]=1
L[1]=2
L[2]=3
L[3]=4
L[4]=0
L[5]=0
Run Code Online (Sandbox Code Playgroud)
和
L[-2:2] = [0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
这不适用于经典列表或数组.这样做的好方法是什么?
编辑:这是一个很好的解决方案(由一个答案给出):
class MyList(list):
def __getitem__(self, index):
return super(MyList, self).__getitem__(index) if index >= 0 and index < len(self) else 0
Run Code Online (Sandbox Code Playgroud)
但我仍然无法拥有
L[-2:2] = [0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud) 我该怎么写,letter = sys.argv[2] or 'a'以便如果没有传入的参数a将被分配给字母。 所以基本上我希望默认值letter是a除非传入某些东西。如果要传入某些东西,我希望将其分配给letter
这是我的简单程序:
$ cat loop_count.py
import sys
def count(word,letter):
for char in word:
if char == letter:
count = count + 1
return count
# WHAT I WANT
word = sys.argv[1] or 'banana' # if sys.argv[1] has a value assign it to word, else assign 'banana' to word
letter = sys.argv[2] or 'a' # if sys.argv[2] has a value assign it to letter, else assign 'a' …Run Code Online (Sandbox Code Playgroud) 我想从列表中提取一个项目并返回默认值(如果没有找到)(而不是通常的索引例外).与字典上的get(key,default)非常相似.在仔细阅读文档之后,感觉我仍然忽略了一个提供此功能的简单内置python解决方案.
这是我能想到的最快的:
def pluck(list_items, index, default=None):
return dict(zip(range(len(list_items)), list_items)).get(index, default)
s = [1, 2,]
pluck(s, 3, None)
Run Code Online (Sandbox Code Playgroud)
谢谢!