if(nextProps.Id === this.props.Id) {
this.props.fetchFileUploads(this.props.Id)
}
componentWillReceiveProps
будет вызываться каждый раз, а nextProps.Id
всегда будет равняться this.props.Id
и, следовательно, бесконечному циклу, вместо этого вы можете сохранить Id для определения состояния и улучшить свое сравнение оттуда
Что-то вроде:
zip(t[::2], t[1::2])
Полный пример:
>>> s = ','.join(str(i) for i in range(10))
>>> s
'0,1,2,3,4,5,6,7,8,9'
>>> t = [int(i) for i in s.split(',')]
>>> t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> p = zip(t[::2], t[1::2])
>>> p
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
>>>
Если количество элементов нечетное, последний элемент будет проигнорирован. Будут включены только полные пары.
Более общий вариант, который также работает с итераторами и позволяет комбинировать любое количество элементов:
def n_wise(seq, n):
return zip(*([iter(seq)]*n))
Замените zip на itertools.izip, если вы хотите получить ленивый итератор вместо списка .
Мне неизвестен такой преобразователь. Однако существует mpc , который может создавать как make-файлы, так и проекты VC из одного и того же mpc DSL .
поддерживает несколько версий make (GNU, Microsoft, Borland, Automake), Visual C ++ 6.0 и Visual Studio 2003, 2005 и 2008.
Как насчет этого:
>>> x = '0,1,2,3,4,5,6,7,8,9'.split(',')
>>> def chunker(seq, size):
... return (tuple(seq[pos:pos + size]) for pos in xrange(0, len(seq), size))
...
>>> list(chunker(x, 2))
[('0', '1'), ('2', '3'), ('4', '5'), ('6', '7'), ('8', '9')]
Это также хорошо справится с неравномерными суммами:
>>> x = '0,1,2,3,4,5,6,7,8,9,10'.split(',')
>>> list(chunker(x, 2))
[('0', '1'), ('2', '3'), ('4', '5'), ('6', '7'), ('8', '9'), ('10',)]
PS У меня был этот код спрятан, и я только что понял, откуда я его взял. В stackoverflow есть два очень похожих вопроса по этому поводу:
Там также есть этот драгоценный камень из раздела Рецепты в itertools
:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
Решение очень похоже на FogleBirds, но с использованием итератора (выражения генератора) вместо понимания списка .
s = '0,1,2,3,4,5,6,7,8,9'
# generator expression creating an iterator yielding numbers
iterator = (int(i) for i in s.split(','))
# use zip to create pairs
# (will ignore last item if odd number of items)
# Note that zip() returns a list in Python 2.x,
# in Python 3 it returns an iterator
pairs = zip(iterator, iterator)
И понимание списков, и выражения генератора, вероятно, будут считаться весьма «питоническими».