Прохождение через два списка параллельно в понимании списка [дубликат]

Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
548
задан martineau 30 September 2017 в 20:24
поделиться

7 ответов

for f, b in zip(foo, bar):
    print(f, b)

zip останавливается, когда останавливается более короткое число foo или bar.

В Python 2, zip возвращает список кортежей. Это нормально, когда foo и bar не массивны. Если они оба массивны, то формирование zip(foo,bar) является излишне массивной временной переменной и должно быть заменено на itertools.izip или itertools.izip_longest, которое возвращает итератор вместо списка.

import itertools
for f,b in itertools.izip(foo,bar):
    print(f,b)
for f,b in itertools.izip_longest(foo,bar):
    print(f,b)

izip останавливается при исчерпании foo или bar. izip_longest останавливается, когда оба foo и bar исчерпаны. Когда более короткий итератор (ы) исчерпан, izip_longest дает кортеж с None в позиции, соответствующей этому итератору. Вы также можете установить другой fillvalue, кроме None, если хотите.

В Python 3, zip возвращает итератор кортежей, например itertools.izip в Python2. Чтобы получить список кортежей, используйте list(zip(foo, bar)). И чтобы застегнуть молнию до тех пор, пока оба итератора не будут исчерпаны, вы будете использовать itertools.zip_longest .


Обратите внимание также, что zip и его zip -подобный brethen могут принять произвольное число итераций в качестве аргументов. Например,

for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'], 
                              ['red', 'blue', 'green']):
    print('{} {} {}'.format(num, color, cheese))

печатает

1 red manchego
2 blue stilton
3 green brie
867
ответ дан unutbu 16 August 2018 в 02:50
поделиться
  • 1
    @unutbu В Python 3 имя функции itertools.zip_longest вместо itertools.izip_longest (в основном zip... вместо izip... в модуле itertools). Это редактирование одного персонажа, иначе я бы отредактировал супер незначительную коррекцию в вашем ответе. – Michael A 15 October 2014 в 21:04
  • 2
    @unutbu Почему я предпочитаю метод OP над izip (хотя izip / zip выглядит намного чище)? – armundle 14 March 2016 в 20:23
  • 3
    Вы можете сначала упомянуть Python 3, так как это, вероятно, более надежное будущее. Более того, стоит отметить, что в Python 3, zip () имеет именно то преимущество, которое только для itertools.izip () имело в Python 2, и поэтому обычно это путь. – Daniel S. 14 June 2016 в 17:40
  • 4
    Могу ли я попросить вас обновить свой ответ, чтобы явно указать, что функции zip и zip -like из itertools принимают любое количество итераций, а не только 2? Этот вопрос сейчас канонический, и ваш ответ - единственное, что стоит обновить. – vaultah 11 July 2016 в 15:01
  • 5
    @CharlieParker: Да, вы можете, но тогда вы будете использовать for i, (f, b) in enumerate(zip(foo, bar)). – unutbu 6 March 2018 в 20:20

То, что вы ищете, называется zip .

9
ответ дан Alex Martelli 16 August 2018 в 02:50
поделиться

Вы хотите функцию zip.

for (f,b) in zip(foo, bar):
    print "f: ", f ,"; b: ", b
38
ответ дан Karl Guertin 16 August 2018 в 02:50
поделиться
  • 1
    Перед Python 3.0 вы хотите использовать itertools.izip, если у вас есть большое количество элементов. – Georg Schölly 2 November 2009 в 22:35

zip-функция решает проблему Docs: Функция ZIP-библиотеки

AIM: Чтобы поставить выходной бок о бок Проблема:

#value1 is a list
value1 = driver.find_elements_by_class_name("review-text")
#value2 is a list
value2 = driver.find_elements_by_class_name("review-date")

for val1 in value1:
    print(val1.text)
    print "\n"
for val2 in value2:
    print(val2.text)
    print "\n"

Выход: обзор1 обзор2 обзор3 дата1 дата2 дата3

Решение:

for val1, val2 in zip(value1,value2):
    print (val1.text+':'+val2.text)
    print "\n"

Результат: review1: date1 review2: date2 review3: date3

3
ответ дан Manojit Ballav 16 August 2018 в 02:50
поделиться

Встроенный zip делает именно то, что вы хотите. Если вы хотите использовать те же самые итерации вместо списков, вы можете посмотреть на itertools.izip, который делает то же самое, но дает результаты по одному.

12
ответ дан robince 16 August 2018 в 02:50
поделиться
def ncustom_zip(seq1,seq2,max_length):
        length= len(seq1) if len(seq1)>len(seq2) else len(seq2) if max_length else len(seq1) if len(seq1)<len(seq2) else len(seq2)
        for i in range(length):
                x= seq1[i] if len(seq1)>i else None  
                y= seq2[i] if len(seq2)>i else None
                yield x,y


l=[12,2,3,9]
p=[89,8,92,5,7]

for i,j in ncustom_zip(l,p,True):
        print i,j
for i,j in ncustom_zip(l,p,False):
        print i,j
-1
ответ дан Sagar T 16 August 2018 в 02:50
поделиться
  • 1
    Хотели бы вы помочь бороться с неправильным представлением о том, что StackOveflow - бесплатная служба кодирования? Тогда, пожалуйста, увеличьте свой код только ответ с некоторыми объяснениями. – Yunnosch 24 December 2017 в 15:06
  • 2
    это мой ответ? – Sagar T 24 December 2017 в 15:09
  • 3
    что не так в моем ответе.? – Sagar T 25 December 2017 в 06:12
  • 4
    Как объясняется в первом комментарии, в нем отсутствует объяснение, что делает ваш код, почему он лучше / отличается от других параметров, каковы его производительность и память, и т. Д. Просто дамп кода не является хорошим ответом на переполнение стека – rene 25 December 2017 в 11:41

Вы должны использовать функцию zip '. Вот пример, как ваша собственная функция zip может выглядеть как

def custom_zip(seq1, seq2):
    it1 = iter(seq1)
    it2 = iter(seq2)
    while True:
        yield next(it1), next(it2)
5
ответ дан Vlad Bezden 16 August 2018 в 02:50
поделиться
  • 1
    Не имеет ли такого же результата, как zip(seq1, seq2)? – Niklas Mertsch 6 June 2018 в 09:35
  • 2
    @NiklasMertsch да, он имеет точно такой же результат. Я просто привел пример, как выглядит zip-функция – Vlad Bezden 6 June 2018 в 15:40
Другие вопросы по тегам:

Похожие вопросы: