我正在尝试使用 zip 函数将两个列表添加在一起:
x = [2, 4]
y = [5, 7]
sum_list = [sum(x) for x in zip(list1, list2)]
> [7,11]
但是,如果列表由字符串组成,我想改为连接,但 sum 函数在这种情况下不起作用。
x = ['a']
y = ['b']
return ['ab']
有没有办法把它变成一个 if 语句,这样如果 x[0] = 字符串,然后连接而不是求和?
答案 0 :(得分:10)
+
运算符怎么样?
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']
+
运算符的方法版本:operator.add
怎么样?
第一个解决方案是依赖于数据的,当改变列表的数量时,它也需要改变代码。
解决方案是在对的每个值上一次又一次地应用 +
(使用 add
版本)
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']
答案 1 :(得分:0)
您可以将 map
与 add
函数一起使用-
from operator import add
x = [2, 4, 'a']
y = [5, 7, 'b']
sum_list = list(map(add, x, y))
输出 -
[7, 11, 'ab']
答案 2 :(得分:0)
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']
答案 3 :(得分:0)
这是我想出的 if 语句。您可以调整它以满足您的需求。基本上,只需将项目与您知道的字符串进行比较即可。
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)