Próbuję dodać dwie listy razem za pomocą funkcji zip:

x = [2, 4]
y = [5, 7]
sum_list = [sum(x) for x in zip(list1, list2)]
> [7,11]

Jeśli jednak listy składają się z ciągów, chcę zamiast tego połączyć, ale funkcja sum nie działa w tym przypadku.

x = ['a']
y = ['b']
return ['ab']

Czy istnieje sposób na przekształcenie tego w instrukcję if, aby jeśli x[0] = string, to łączenie zamiast sumy?

0
Alex Lim 18 czerwiec 2021, 20:47

4 odpowiedzi

Najlepsza odpowiedź

Prosty

A co z operatorem +?

def concat_or_sum(list1, list2):
    return [x + y for x, y in zip(list1, list2)]

sum_list = concat_or_sum([2, 4], [5, 7])
print(sum_list)  # [7, 11]

sum_list = concat_or_sum(['a', 'c'], ['b', 'd'])
print(sum_list)  # ['ab', 'cd']

Ulepszać

A co z wersją metody operatora +: operator.add?

Pierwsze rozwiązanie jest zależne od danych, zmieniając ilość list, wymaga również zmiany kodu.

Rozwiązaniem jest zastosowanie + (używając wersji add) raz po raz na każdej wartości par

import operator
from functools import reduce

def concat_or_sum(*lists):
    return [reduce(operator.add, x) for x in zip(*lists)]

sum_list = concat_or_sum([2, 4, 't'], [5, 7, 't'], [10, 11, 't'])
print(sum_list)  # [17, 22, 'ttt']

sum_list = concat_or_sum([1, 'a', 'c'], [2, 'b', 'd'], [3, 'e', 'f'])
print(sum_list)  # [6, 'abe', 'cdf']
10
azro 18 czerwiec 2021, 17:57

Możesz użyć map z funkcją add-

from operator import add
x = [2, 4, 'a']
y = [5, 7, 'b']
sum_list = list(map(add, x, y))

Wynik -

[7, 11, 'ab']
0
Shradha 18 czerwiec 2021, 17:57
import operator
from functools import reduce

list1 = [2, 4, 'a']
list2 = [5, 7, 'b']

sum_list = [reduce(operator.add, x) for x in zip(list1, list2)]

print(sum_list)  # [7, 11, 'ab']
0
PlugNPlay 18 czerwiec 2021, 17:57

To jest stwierdzenie if, które wymyśliłem. Możesz go dostosować do swoich potrzeb. Zasadniczo samo porównanie przedmiotu z czymś, co znasz, jest ciągiem.

 a = "This is A"
    b = 1
    type_str = "Test"
def test_str(x):
    if type(x) == type(type_str):
        print("This is a string")
    elif type(x) != type(type_str):
        print("This is not a string")
test_str(a)
test_str(b)
0
Tony Dean 18 czerwiec 2021, 19:00