Как по существу разделить логическую функцию на одну строку в python? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть строка под названием hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]. Я хочу, чтобы ["KC", "9D", "10S", "jH"] возвращал True, а остальная часть строки возвращала False. Как мне это сделать?

Я уже написал это

import re
def checkCard():
     hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
     stack = map(bool, hand)
     print(list(stack))  
checkCard()

Ответы [ 5 ]

2 голосов
/ 28 мая 2020

Вы можете попробовать

def checkCard():
    hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
    true_vals = set(["KC", "9D", "10S", "jH"])
    stack  = map(lambda val: val in true_vals, hand)
    print(*hand)
    print(*stack)
checkCard()

Вывод

KC 9D 10S jH 11H 0S HC Q2S 100D 1C 2D2
True True True True False False False False False False False

Функция карты будет проверять каждое значение в руке, если оно находится в наборе true_val, преобразование, которое нужно установить, связано с проблемами производительности, поскольку поиск в наборе происходит быстрее, чем в списке.
Затем распечатайте руку и стопку, распаковав их в распечатке.

1 голос
/ 28 мая 2020

Вы можете сделать это с помощью функции map следующим образом:

def checkCard():
     hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
     stack = map(lambda x: x in ["KC", "9D", "10S", "jH"], hand)
     print(list(stack))
1 голос
/ 28 мая 2020
# import re
def checkCard():
    hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
    true_vals = ["KC", "9D", "10S", "jH"]
    bool_op = list(map(lambda val: True if val in true_vals else False, hand))

    print(bool_op)  
checkCard()

Вывод:

[True, True, True, True, False, False, False, False, False, False, False]
0 голосов
/ 16 июня 2020

map и lambda и преобразование в list даже не нужны для достижения того, чего вы хотите. Самый pythoni c, а также самое простое / простое решение - это проверка in в понимании списка:

def checkCard():
    hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
    true_values = ["KC", "9D", "10S", "jH"]
    stack = [v in true_values for v in hand]  # check for inclusion in a list comprehension
    print(stack)  
checkCard()
0 голосов
/ 28 мая 2020

попробуйте это, map(func, iterable)

>>> hand = ["KC", "9D", "10S", "jH","11H", "0S", "HC", "Q2S", "100D", "1C", "2D2"]
>>> 
>>> true_vals = ["KC", "9D", "10S", "jH"] 
>>> 
>>> list(map(lambda x : True if x in true_vals else False, hand))

[True, True, True, True, False, False, False, False, False, False, False]
...