Как я могу запустить две функции для цикла шаг за шагом? - PullRequest
0 голосов
/ 13 ноября 2018
fruits=["apple","banana","melon"]
for fruit in fruits:
    print fruit #print1
    print len(fruit) #print2

Я знаю, что вывод этого скрипта будет как ниже

apple
5
banana
6
melon
5

но я хочу запустить этот скрипт как
# print1> # print1> # print1> # print2> # print2> # print2

поэтому вывод будет похож на

apple
banana
melon
5
6
5

Есть ли хороший способ для этого? (Дело в том, что я хочу использовать для функции один раз) (Извините за плохое расширение)

Ответы [ 7 ]

0 голосов
/ 13 ноября 2018

Вы можете использовать выражения генератора:

fruits=["apple","banana","melon"]

def getfruits(fruits):
    for f in fruits:
        print(f)
        yield str(len(f)) + '\n'

print(*list(getfruits(fruits)))

Вывод:

apple
banana
melon
5
6
5
0 голосов
/ 13 ноября 2018
fruits=["apple","banana","melon"]

for lists in (fruits, (len(fruit) for fruit in fruits)):
    for each_list in lists:
        print(each_list)

Я делаю цикл, повторяющийся по двум спискам; фрукты и список с указанием длины фруктов во фруктах.

Затем я распечатываю каждый список.

Вероятно, это может быть более эффективным с точки зрения памяти, но для меня это имеет смысл. Я шел на удобочитаемость.

0 голосов
/ 13 ноября 2018

Похоже, вы могли бы просто пройтись по одному и тому же списку дважды, чтобы получить желаемую запись:

for i in range(2):
    for fruit in fruits:
        print(fruit)
0 голосов
/ 13 ноября 2018

Самый простой способ сделать это - повторить цикл дважды:

fruits = ["apple", "banana", "melon"]

for _ in range(2):
    for fruit in fruits:
        print fruit

, что дает:

apple
banana
melon
apple
banana
melon

Это позволяет избежать дублирования объекта списка, избежать дублирования кода и масштабироватьлегко.

Редактировать: для итерации по двум различным функциям, отдельно, вы можете просто повторить список дважды:

fruits = ["apple", "banana", "melon"]

for fruit in fruits:
    print fruit
for fruit in fruits:
    print len(fruit)

Для более сложных ситуаций вы также можетесоставьте список своих функций и выполните следующие действия:

def print_name(item):
    print(string)

def print_name_length(item):
    print(len(item))

fruits = ["apple", "banana", "melon"]

for func in (print_name, print_name_length):
    for fruit in fruits: 
        func(fruit)
0 голосов
/ 13 ноября 2018

Нет способа сделать это за один цикл.Есть ли причина, по которой это не сработает:

for fruit in fruits:
    print fruit #print1
for fruit in fruits:
    print fruit #print2
0 голосов
/ 13 ноября 2018

Вы можете просто запустить один и тот же цикл дважды.

fruits = ["apple","banana","melon"]
for f in fruits:
  print f
for f in fruits:
  print f

Что даст вам результат. Это может быть некрасиво, но это делает работу.

0 голосов
/ 13 ноября 2018

Вы можете создать список функций, которые вы хотите вызвать, и зациклить их сначала, а затем зациклить fruits:

fruits = ["apple", "banana", "melon"]

for func in [lambda x: x, len]:
    for fruit in fruits:
        print(func(fruit))

Выход

apple
banana
melon
5
6
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...