我一直在为这段代码出汗 - 它返回列表中的所有素数:
primes = range(2, 20)
for i in range(2, 8):
primes = filter(lambda x: x == i or x % i, primes)
print primes
Run Code Online (Sandbox Code Playgroud)
它有效...但我不明白" x == i or x % i"在整个事情中扮演的角色.
我也不明白为什么第二个范围只有2到7.
我甚至创建了Eratosthenes筛选器的Python实现,希望这可能会给我一些见解,但事实并非如此.
当我删除x % i组件时,我希望这段代码能够给出两组共有的数字,但它不会:
nums = [2, 20]
for i in range(2, 8):
nums = filter(lambda x: x == i, nums)
print nums
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
同样,当我删除x == i组件时,它返回从11到19的素数.
nums = range(2, 20)
for i in range(2, 8):
nums = filter(lambda x: …Run Code Online (Sandbox Code Playgroud) 我想只检索词典"e"中的第四项(下面).
我尝试使用OrderedDict()方法,但它没有用.这是我的结果:
from collections import OrderedDict
e = OrderedDict()
e = {'a': 'A',
'b': 'B',
'c': 'C',
'd': 'D',
'e': 'E'
}
for k, v in e.items():
print k, v
print e.items()[3]
Run Code Online (Sandbox Code Playgroud)
最后一行返回:('e','E')
所以我将键和值转换为列表,但是这些列表在我打印时是如何出现的:
['a', 'c', 'b', 'e', 'd']
['A', 'C', 'B', 'E', 'D']
Run Code Online (Sandbox Code Playgroud)
对我来说,这解释了它为什么会发生,但不是如何发生的.
所以,接下来我整理了它们.这给了我正在寻找的结果 - 但它似乎不必要地复杂化:
e = {'a': 'A',
'b': 'B',
'c': 'C',
'd': 'D',
'e': 'E'
}
k, v = sorted(e.keys()), sorted(e.values())
print "{}: {}".format(k[3], v[3])
Run Code Online (Sandbox Code Playgroud)
结果:d:D
OrderedDict()不是必需的.
有更简单的方法吗?有人可以解释为什么字典中的元素是这样排序的:
keys: 'a', 'c', 'b', 'e', 'd'
values: …Run Code Online (Sandbox Code Playgroud)