Если вы не можете установить width/max-width
для контейнера, я предполагаю, что вы все равно можете установить max-width
в parent
(левая панель) в container
. Если да, вы можете попробовать установить max-height:inherit
на container
после установки max-width
на левой панели.
<html>
<body style="display: flex">
<!-- left panel -->
<div style="flex: 2; max-height:100px">
<!-- scrollable container, no effect -->
<div style="overflow: scroll;max-height:inherit;">
<!-- big child content div -->
<div style="width: 800px; height: 200px; background: red"></div>
</div>
</div>
<!-- vertical divider -->
<div style="width: 1px; background: blue">
<!-- right panel -->
<div style="flex: 3">
right panel content
</div>
<script type="text/javascript">
</script>
</div><div class="as-console-wrapper"><div class="as-console"></div></div></body>
</html>
Я не думаю, что вы найдете более быстрое решение, чем 3 суммы, предложенные в вопросе. Преимущества numpy видны с большими векторами, а также если вам нужны другие операторы. numpy особенно полезен с матрицами, ведь это уловка, связанная со списками python.
Тем не менее, еще один способ сделать это: D
In [1]: a = [1,2,3]
In [2]: b = [2,3,4]
In [3]: map(sum, zip(a,b))
Out[3]: [3, 5, 7]
Изменить : вы также можете использовать izip из itertools, генераторную версию zip
In [5]: from itertools import izip
In [6]: map(sum, izip(a,b))
Out[6]: [3, 5, 7]
Если вам нужна эффективная векторная арифметика, попробуйте Numpy .
>>> import numpy
>>> a=numpy.array([0,1,2])
>>> b=numpy.array([3,4,5])
>>> a+b
array([3, 5, 7])
>>>
Или (спасибо, Эндрю Джаффе),
>>> a += b
>>> a
array([3, 5, 7])
>>>
Хотя Numeric превосходен, а решения для понимания списков подходят, если вы действительно хотите создать новый список, я удивлен, что никто не предложил «один очевидный способ сделать это» - простой для цикла
! Лучшее:
for i, bi in enumerate(b): a[i] += bi
Также хорошо, вроде как:
for i in xrange(len(a)): a[i] += b[i]
Или, если вы хотите использовать внешнюю библиотеку (и массивы фиксированной длины), используйте numpy , в котором есть «+ =» и связанные операции для in -place operations.
import numpy as np
a = np.array([0, 1, 2])
b = np.array([3, 4, 5])
a += b
Вы можете создать функцию, которая получает размер массива, просматривает его и создает возвращаемый массив, который она возвращает.
Если вы думаете, что Numpy излишни, это должно быть очень быстро, потому что этот код работает на чистом C ( map ()
и __ add __ ()
оба напрямую реализованы в C):
a = [1.0,2.0,3.0]
b = [4.0,5.0,6.0]
c = map(float.__add__, a, b)
Или, если вы не знаете типы в списке:
import operator
c = map(operator.add, a, b)
Улучшение (меньшее потребление памяти) списка понимания
import itertools a = [x + y for x, y в itertools.izip (a, b)]
На самом деле, если вы не уверены, что a будет потреблять, я бы даже использовал выражение генератора:
(x + y для x, y в itertools.izip (a, b))