在Python中,何时应该使用列表和何时使用元组?
有时你没有选择权,例如你有
"hello %s you are %s years old" % x
Run Code Online (Sandbox Code Playgroud)
然后x必须是一个元组.
但如果我是设计API并选择数据类型的人,那么指导原则是什么?
我确信有一种更简单的方法可以解决这个问题.
我正在调用一堆返回列表的方法.该列表可能为空.如果列表非空,我想返回第一个项目; 否则,我想要返回无.此代码有效:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Run Code Online (Sandbox Code Playgroud)
在我看来,应该有一个简单的单行成语,但对于我的生活,我无法想到它.在那儿?
编辑:
我在这里寻找单行表达式的原因并不是因为我喜欢简洁的代码,而是因为我必须编写很多像这样的代码:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
Run Code Online (Sandbox Code Playgroud)
我想要做的事情当然可以用一个函数来完成(也可能是):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y …Run Code Online (Sandbox Code Playgroud) 在实例化和检索元素时,元组和列表之间是否存在性能差异?
可能重复:
Python中的转置/解压缩功能
我使用numpy库中的zip()函数来排序元组,现在我有一个包含所有元组的列表.我已经修改了该列表,现在我想恢复元组,以便我可以使用我的数据.我怎样才能做到这一点?
python有不可变列表吗?
假设我希望拥有有序元素集合的功能,但我想保证不会改变,如何实现?列表是有序的,但它们可以变异.
使用Sqlite,"select..from"命令返回结果"output",其打印(在python中):
>>print output
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
Run Code Online (Sandbox Code Playgroud)
它似乎是一个元组列表.我想在一个简单的1D数组中转换"输出"(我猜的是Python中的列表):
[12.2817, 12.2817, 0, 0, 8.52, 8.52]
Run Code Online (Sandbox Code Playgroud)
或2x3矩阵:
12.2817 12.2817
0 0
8.52 8.52
Run Code Online (Sandbox Code Playgroud)
通过"output [i] [j]"读取
flatten命令不能完成第一个选项的工作,我不知道第二个选项...... :)
你能给我一个提示吗?有些事情很快就会很好,因为真正的数据要大得多(这里只是一个简单的例子).
如何使用类型提示来注释返回一个Iterable总是产生两个值的函数:a bool和a str?提示Tuple[bool, str]很接近,除了它将返回值类型限制为元组,而不是生成器或其他类型的可迭代.
我很好奇,因为我想注释一个foo()用于返回多个值的函数,如下所示:
always_a_bool, always_a_str = foo()
Run Code Online (Sandbox Code Playgroud)
通常函数喜欢foo()做这样的事情return a, b(它返回一个元组),但我喜欢的类型暗示有足够的灵活性,以取代发电机或列表或别的东西返回的元组.
我有一个像这样的dicts列表:
l = [{'name': 'foo', 'values': [1,2,3,4]}, {'name': 'bar', 'values': [5,6,7,8]}]
Run Code Online (Sandbox Code Playgroud)
我想获得这种形式的输出:
>>> [('foo', 'bar'), ([1,2,3,4], [5,6,7,8])]
Run Code Online (Sandbox Code Playgroud)
但是缺乏for环比和append我没有看到解决方案.有比这更聪明的方法吗?
names = []
values = []
for d in l:
names.append(d['name'])
values.append(d['values'])
Run Code Online (Sandbox Code Playgroud) python ×9
list ×5
tuples ×4
python-3.x ×2
dictionary ×1
idioms ×1
ios ×1
numpy ×1
performance ×1
python-2.4 ×1
python-3.5 ×1
swift ×1
type-hinting ×1
types ×1