我想让我的程序"banana"从字典中打印出来.最简单的方法是什么?
请注意,我并不是试图让我的程序打印出与之相关的值"banana",而是打印出"banana"一个for循环,所以当我运行它时,每个键也会打印出来.
这是我的字典:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Run Code Online (Sandbox Code Playgroud) 在Python 2.6中从迭代器获取最后一项的最佳方法是什么?例如,说
my_iter = iter(range(5))
Run Code Online (Sandbox Code Playgroud)
什么是最短的代码/最干净的方式4来自my_iter?
我可以做到这一点,但它看起来效率不高:
[x for x in my_iter][-1]
Run Code Online (Sandbox Code Playgroud) 我最近遇到了一个场景,如果一个集合只包含一个元素,我想用该元素做一些事情.为了得到这个元素,我决定采用这种方法:
element = list(myset)[0]
Run Code Online (Sandbox Code Playgroud)
但这并不是很令人满意,因为它会创建一个不必要的列表.它也可以通过迭代完成,但迭代似乎也不自然,因为只有一个元素.我错过了一些简单的事吗?
我在Python Sympy库中创建一个脚本,并尝试访问solveset()和linsolve()函数返回的结果.我的问题是这些函数返回的对象是有限集类型,我想自动选择一些结果,以便在其他方程中重新输入它.任何人都可以帮助我?
一个例子: 我创建了一个包含两个未知变量的方程列表:
>>> a1, a2 = symbols('a1, a2')
>>> eq2_1 = Eq(-3*a1/10 - 3*a2/20 + 1/12)
>>> eq2_2 = Eq(-3*a1/20 - 13*a2/105 + 1/20)
>>> lista = [eq2_1,eq2_2]
>>> str(lista)
[-3*a1/10 - 3*a2/20 + 1/12, -3*a1/20 - 13*a2/105 + 1/20]
Run Code Online (Sandbox Code Playgroud)
然后使用linsolve()方法解决它.
>>> a = linsolve(lista,a1,a2)
>>> a
{(71/369, 7/41)}
Run Code Online (Sandbox Code Playgroud)
结果是正确的,但我无法将这些结果输入变量.
我尝试了dics,list,tuples,indexing命令,但总是返回错误."Finiteset对象没有属性'命令'"
假设我有一个虚拟函数,它准确地返回作为参数给出的内容:
def dummy_single(arg1):
"""Repeat the same argument."""
return arg1
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式使用这个功能:
same_obj1 = dummy_single(obj1)
Run Code Online (Sandbox Code Playgroud)
现在,如果我想允许这个函数接受多个参数并返回相同的参数,我可以打包和解包参数:
def dummy_multiple(*args):
"""Repeat all given arguments."""
return args
Run Code Online (Sandbox Code Playgroud)
请注意,这个函数恰好是恒等式,但这不是问题的核心。您可以想象任何返回可变长度元组的函数。
当使用多个参数调用时它效果很好:
same_obj1, same_obj2 = dummy_multiple(obj1, obj2)
Run Code Online (Sandbox Code Playgroud)
但是,这不会按预期工作:
same_tuple = dummy_multiple(obj1)
Run Code Online (Sandbox Code Playgroud)
same_obj1包含一个(打包)元组,与前两个示例中的对象相反。我考虑通过以下方式修复此行为,但它看起来并不干净,因为返回的类型根据参数的不同而不同。
def dummy_multiple_fixed(*args):
"""Repeat all given arguments."""
if len(args) == 1:
return args[0]
return args
Run Code Online (Sandbox Code Playgroud)
这不是一个关键问题并且很容易解决。但我找不到一种干净而优雅的方法来解决这个问题。
假设我有一个列表,其中包括:
[['a','b','c','d']]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以删除外部列表,以便输出
['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)
我想到了类似 pop 的东西,但是删除了元素,我只想删除外部列表。
我知道我可以遍历双列表并将元素附加到新列表中,问题将得到解决,但我对该解决方案不满意,我想要一个更流畅的代码更清晰的解决方案。
我有这种形式的列表列表:
[[('1st',), ('2nd',), ('5th',)], [('1st',)]]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
[['1st', '2nd', '5th'], ['1st']]
Run Code Online (Sandbox Code Playgroud)
我试过这个:
res = [list(ele) for ele in racer_placement for ele in ele]
Run Code Online (Sandbox Code Playgroud)
但我得到的结果:
[['1st'], ['2nd'], ['5th'], ['1st']]
Run Code Online (Sandbox Code Playgroud) 几天前,在我的考试中,我遇到了这个问题: 4. 不用 if 语句重写以下代码。代码应该是单行的。(不使用任何其他循环)
If not flora and fauna:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我无法回答这个问题,但对我来说仍然很有趣/奇怪,因为我不是 Python 专家。我已经尝试了很多方法,比如extend()函数,但仍然不知道如何做到这一点。
任何想法或提示?
编辑:我错误地提出了这个问题。非常遗憾。由于我没有太多经验,我认为这个问题只能通过列出来解决。
我有这样的事情:
[('a',), ('b',), ('c',),('d',)]
Run Code Online (Sandbox Code Playgroud)
我希望它是这样的:
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
p = [('a',), ('b',), ('c',),('d',)]
[el[0] for el in p]
Run Code Online (Sandbox Code Playgroud)
有没有更“Pythonic 的方式”来做到这一点?我想避免使用 for 循环,因为我的列表由 165400 个元组组成
python ×9
dictionary ×2
list ×2
python-3.x ×2
tuples ×2
iterator ×1
python-2.7 ×1
set ×1
sympy ×1