目标:表达的工作模拟
{k1: v1, k2: v2 for k1, k2, v1, v2 in data}
Run Code Online (Sandbox Code Playgroud)
或更具体的情况{k1: v, k2: v for k1, k2, v, _ in data}
data仅迭代1 次(在给定的示例中data是 4 元组的可迭代对象)。
(以及关于列表理解的类似问题,例如[myfunc1(v1), myfunc2(v2) for v1, v2 in data])。
我只能假设使用自己的迭代器的解决方案:
def getby(iterable_data, iterable_indexes):
for indexed_data in iterable_data:
for tupl in iterable_indexes:
yield tuple(indexed_data[ind] for ind in tupl)
raise StopIteration
Run Code Online (Sandbox Code Playgroud)
工作示例:list(getby([('a', 'b', 'c'), ('d', 'e', 'f', 'g')], [(0, 1), (2, 1)]))return [('a', 'b'), ('c', 'b'), ('d', …
python list-comprehension python-3.x dictionary-comprehension
给出文件名列表filenames = [...].
是否可能重写I/O安全的下一个列表理解:[do_smth(open(filename, 'rb').read()) for filename in filenames]?使用with语句,.close方法或其他东西.
另一个问题是:是否可能为下一个代码编写I/O安全列表理解?
results = []
for filename in filenames:
with open(filename, 'rb') as file:
results.append(do_smth(file.read()))
Run Code Online (Sandbox Code Playgroud) 目标:例如,给定有限迭代器p0, p1, ..., pn转换为(p0, p1), (p1, p2), ..., (pn-1, pn), (pn, None)- 迭代器通过成对的具有特殊最后项的连续项.
pairwise()函数存在于文档中作为itertools用法示例:
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
Run Code Online (Sandbox Code Playgroud)
但是我想另外在迭代器的末尾添加另一个项目(如果它是有限的),并且对第二个元素的某个默认值(例如,None).
如何有效地实现这个附加功能?
考虑一个简单的例子:
def f():
try:
raise TypeError
except TypeError:
raise ValueError
f()
Run Code Online (Sandbox Code Playgroud)
我想在执行后抛出TypeError对象.有可能吗?ValueErrorf()
如果我执行函数f()然后python3打印到stderr所有异常链异常链(PEP-3134)就像
Traceback (most recent call last):
File "...", line 6, in f
raise TypeError
TypeError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "...", line 11, in <module>
f()
File "...", line 8, in f
raise ValueError
ValueError
Run Code Online (Sandbox Code Playgroud)
所以我会得到异常链的所有异常列表或检查异常链中是否存在某种类型的异常(TypeError在上面的例子中).
给定两个数组a=np.array([[1, 3], [3, 4]])和b=np.array([2, 2])。
目标:np.array([False, True])通过类似的操作获取数组a>b。即比较行(True 如果每对要素的满足>运营商其他False),而不是按元素比较(即我不希望GET np.array([[False, True], [True, True]]))。
对于3-D和(可选)N维数组,也是如此。例如
a1 = np.array([[[1, 2, 1], [2, 3, 2]], [[3, 4, 3], [4, 3, 4]]])
b1 = np.array([1, 1, 1])
Run Code Online (Sandbox Code Playgroud)
操作就像a1 > b1必须返回np.array([[False, True], [True, True]])。
怎么做?