List 将函数应用于列表的每个元素

List 将函数应用于列表的每个元素,list,python-3.x,List,Python 3.x,我正在尝试学习Python,以便在raspberry Pi中执行一些项目,因此我对所有的编码都还是非常陌生的。我想对字符串中的每个字母应用一个函数,包括空格和重复字母。我首先将它转换为一个列表,然后将其更改为使用这里的一个答案中的提示,但到目前为止,似乎对于同一列表中的两个相等元素,该函数只应用于其中一个。 例如,在这种情况下,输出上只有一个L和一个O,没有空格(空格应输出0.7s的暂停)。 下面是我正试图编写的基于monkmakes.com项目之一的非常简单的程序的确切代码。基本上,这个想法是

我正在尝试学习Python,以便在raspberry Pi中执行一些项目,因此我对所有的编码都还是非常陌生的。我想对字符串中的每个字母应用一个函数,包括空格和重复字母。我首先将它转换为一个列表,然后将其更改为使用这里的一个答案中的提示,但到目前为止,似乎对于同一列表中的两个相等元素,该函数只应用于其中一个。 例如,在这种情况下,输出上只有一个L和一个O,没有空格(空格应输出0.7s的暂停)。 下面是我正试图编写的基于monkmakes.com项目之一的非常简单的程序的确切代码。基本上,这个想法是通过点亮一个连接到树莓圆周率的LED,将一个字符串转换成莫尔斯电码。到目前为止,它仅用于处理消息“Hello World”:

谁能告诉我如何将函数应用于列表中的每个字符串(字符),甚至是重复的元素和空格?
提前谢谢你

您可以使用映射功能:

list_name = list(map(function_name, iterable_variable))

其中,“list_name”是保存结果的变量,“function_name”是希望应用于列表中所有元素的函数,“iterable_variable”是可以循环使用的任何变量,如列表或字符串。您甚至可以跳过将字符串转换为列表,因为这也可以做到。

我的一位朋友帮了我,他调整了代码,将方法条件重新排列为Elif,并将“char”替换为其他内容的迭代。显然,“char”引起了一些问题。最后一个循环也被清理干净了。以下是最终工作代码:

import RPi.GPIO as GPIO
import time
import itertools

#define basic blink styles for morse
#length of a dot is one unit
#length of a dash is three units
def fast_blink():
    # Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
    GPIO.setmode(GPIO.BCM)

    red_pin = 18

    GPIO.setup(red_pin, GPIO.OUT)
    GPIO.output(red_pin, True)  # LED on
    time.sleep(0.1)             # delay 0.1 seconds
    GPIO.output(red_pin, False) # LED off
    time.sleep(0.1)             # delay 0.1 seconds
def slow_blink():
    # Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
    GPIO.setmode(GPIO.BCM)

    red_pin = 18

    GPIO.setup(red_pin, GPIO.OUT)
    GPIO.output(red_pin, True)  # LED on
    time.sleep(0.3)             # delay 0.1 seconds
    GPIO.output(red_pin, False) # LED off
    time.sleep(0.1)             # delay 0.1 seconds

#Morse Code Letter Blink Funcions
#Define fast_blink and slow_blink repetitions
#The space between parts of the same letter is one unit
#The space between letters is three units

#define H code
def morse_H():
    print("H")
    for _ in itertools.repeat(None, 4):
        fast_blink()
    time.sleep(0.3)
#define E code
def morse_E():
    print("E")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.3)
#define L code
def morse_L():
    print("L")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        fast_blink()
    time.sleep(0.3)
#define O code
def morse_O():
    print("O")
    for _ in itertools.repeat(None, 3):
        slow_blink()
    time.sleep(0.3)
#define W code
def morse_W():
    print("W")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        slow_blink()
    time.sleep(0.3)
#define R code
def morse_R():
    print("R")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.3)
#define D code
def morse_D():
    print("D")
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        fast_blink()
    time.sleep(0.3)

#MESSAGE INPUT
message = input("Type your message \n")
message = message.upper()
print("Translating {} to morse, look at the LED" .format(message))
len_message = len(message)
print("Message is {} characters long." .format(len_message))

#MESSAGE TRANSLATION
#Create translation function
def m_translate(letter):
    if letter == "H":
        morse_H()
    elif letter == "E":
        morse_E()
    elif letter == "L":
        morse_L()
    elif letter == "O":
        morse_O()
    elif letter == "W":
        morse_W()
    elif letter == "R":
        morse_R()
    elif letter == "D":
        morse_D()
    elif letter == " ":
        print("\n")
        time.sleep(0.7)
    else:
        pass

#MESSAGE OUTPUT
#Execute in endless loop
try:
    while True:
        for letter in message:
           m_translate(letter)
        print ("\n" * 100)
except KeyboardInterrupt:
        print("Transmission ended.")
        GPIO.cleanup()
        quit

这是Python3 btwDupplicate中的,我在问题的代码和答案的代码中都尝试了这个建议,我仍然得到相同的问题非常感谢你的建议,它帮助我找到了我以前没有使用过的map函数。虽然在谷歌搜索中,我看到它表明我还没有弄明白如何正确使用它。但是,对于这种情况,最终输出是相同的。我正在根据monkmakes.com的一个项目,将代码编辑为我正在尝试的非常简单的程序的确切代码。基本上,这个想法是通过点亮一个连接到树莓圆周率的LED将字符串转换成莫尔斯电码
import RPi.GPIO as GPIO
import time
import itertools

#define basic blink styles for morse
#length of a dot is one unit
#length of a dash is three units
def fast_blink():
    # Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
    GPIO.setmode(GPIO.BCM)

    red_pin = 18

    GPIO.setup(red_pin, GPIO.OUT)
    GPIO.output(red_pin, True)  # LED on
    time.sleep(0.1)             # delay 0.1 seconds
    GPIO.output(red_pin, False) # LED off
    time.sleep(0.1)             # delay 0.1 seconds
def slow_blink():
    # Configure the Pi to use the BCM (Broadcom) pin names, rather than the pin positions
    GPIO.setmode(GPIO.BCM)

    red_pin = 18

    GPIO.setup(red_pin, GPIO.OUT)
    GPIO.output(red_pin, True)  # LED on
    time.sleep(0.3)             # delay 0.1 seconds
    GPIO.output(red_pin, False) # LED off
    time.sleep(0.1)             # delay 0.1 seconds

#Morse Code Letter Blink Funcions
#Define fast_blink and slow_blink repetitions
#The space between parts of the same letter is one unit
#The space between letters is three units

#define H code
def morse_H():
    print("H")
    for _ in itertools.repeat(None, 4):
        fast_blink()
    time.sleep(0.3)
#define E code
def morse_E():
    print("E")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.3)
#define L code
def morse_L():
    print("L")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        fast_blink()
    time.sleep(0.3)
#define O code
def morse_O():
    print("O")
    for _ in itertools.repeat(None, 3):
        slow_blink()
    time.sleep(0.3)
#define W code
def morse_W():
    print("W")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        slow_blink()
    time.sleep(0.3)
#define R code
def morse_R():
    print("R")
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 1):
        fast_blink()
    time.sleep(0.3)
#define D code
def morse_D():
    print("D")
    for _ in itertools.repeat(None, 1):
        slow_blink()
    time.sleep(0.1)
    for _ in itertools.repeat(None, 2):
        fast_blink()
    time.sleep(0.3)

#MESSAGE INPUT
message = input("Type your message \n")
message = message.upper()
print("Translating {} to morse, look at the LED" .format(message))
len_message = len(message)
print("Message is {} characters long." .format(len_message))

#MESSAGE TRANSLATION
#Create translation function
def m_translate(letter):
    if letter == "H":
        morse_H()
    elif letter == "E":
        morse_E()
    elif letter == "L":
        morse_L()
    elif letter == "O":
        morse_O()
    elif letter == "W":
        morse_W()
    elif letter == "R":
        morse_R()
    elif letter == "D":
        morse_D()
    elif letter == " ":
        print("\n")
        time.sleep(0.7)
    else:
        pass

#MESSAGE OUTPUT
#Execute in endless loop
try:
    while True:
        for letter in message:
           m_translate(letter)
        print ("\n" * 100)
except KeyboardInterrupt:
        print("Transmission ended.")
        GPIO.cleanup()
        quit