我正在使用包含字符串和整数的列表,我想创建一个函数,根据不同的条件将新元素连接到这些字符串和整数。例如,如果列表中的元素是一个整数,我想向它添加100;如果元素是一个字符串,我想添加“是名称”。我尝试使用列表解析但无法弄清楚如何计算列表中存在的字符串和整数(因此不确定这是否可行)。以下是我正在使用的基本示例:
sample_list = ['buford', 1, 'henley', 2, 'emi', 3]
输出看起来像这样:
sample_list = ['buford is the name', 101, 'henley is the name', 102, 'emi is the name', 103]
我尝试过这样的事情:
def concat_func():
sample_list = ['buford', 1, 'henley', 2, 'emi', 3]
[element + 100 for element in sample_list if type(element) == int]
我也尝试过使用基本的for循环,并且不确定这是否是正确的方法:
def concat_func():
sample_list = ['buford', 1, 'henley', 2, 'emi', 3]
for element in sample_list:
if type(element) == str:
element + " is the name"
elif type(element) == int:
element + 100
return sample_list
答案 0 :(得分:3)
Plain LC:
>>> ['{} is the name'.format(x) if isinstance(x,str) else x+100 for x in sample_list]
['buford is the name', 101, 'henley is the name', 102, 'emi is the name', 103]
答案 1 :(得分:1)
list comprehension是一种方式:
sample_list = ['buford', 1, 'henley', 2, 'emi', 3]
result = [k+' is the name' if isinstance(k, str) \
else k+100 if isinstance(k, int) \
else k for k in sample_list]
# ['buford is the name', 101, 'henley is the name', 102, 'emi is the name', 103]
答案 2 :(得分:1)
你很亲密。而不是检查类型是否相等,使用'是'。您还可以执行注释中指出的isinstance()来检查str / int的继承和子类。
sample_list = ['buford', 1, 'henley', 2, 'emi', 3]
newlist = []
for s in sample_list:
if type(s) is int:
newlist.append(s + 100)
elif type(s) is str:
newlist.append(s + ' is the name')
else:
newlist.append(s)
newlist2 = []
for s in sample_list:
if isinstance(s, int):
newlist2.append(s + 100)
elif isinstance(s, str):
newlist2.append(s + ' is the name')
else:
newlist2.append(s)
print(newlist)
print(newlist2)
答案 3 :(得分:1)
只需更改if条件的位置,然后添加' else'条件。就像这样:
[element + (100 if type(element) == int else " is the name") for element in sample_list]
答案 4 :(得分:1)
您可以使用键作为映射创建映射dict
,并将值作为需要连接的值
>>> d = {'str':"is the name", "int": 100}
接下来,您可以执行简单的列表理解,并在每个列表元素上使用+
运算符,并使用映射dict的值。你需要产生一个两元组的list元素及其类型。这可以使用zip
和map
>>> [k+d[t] for k,t in zip(l,map(lambda x: type(x).__name__,l))]
>>> ['bufordis the name', 101, 'henleyis the name', 102, 'emiis the name', 103]