我有一个包含
等元素的列表["xyz", "abc", "123,123,123", 456.78 , "pqr"]
我想只将字符串中的元素连接成一个字符串,并将数字字符串转换为数字,例如
[ "xyzabcpqr", 123123123, 456.78]
如何以pythonic方式完成?
答案 0 :(得分:1)
也许这不是很漂亮但是有效
import numbers
L_in = ["xyz", "abc", "123,123,123", 456.78 , "pqr"]
L_out = []
char_str = ""
for i in L_in:
if(isinstance(i , numbers.Number)):
L_out.append(i)
elif any(c.isdigit() for c in i):
L_out.append(int(''.join([c for c in i if c.isdigit()])))
else:
char_str += i
L_out = [char_str]+L_out
结果:
['xyzabcpqr', 123123123, 456.78]
答案 1 :(得分:0)
您可以使用isinstance()
:
它是这样的:
import numbers
mylist = ["xyz", "abc", "123,123,123", 456.78 , "pqr"]
for i in mylist:
if(isinstance(i , numbers.Number)):
pass
else:
print (i)
重要:我复制了您的列表项并检查出来,结果是这样的:
'xyz' , 'abc' , '123,123,123' , 'pqr'
你可以看到它按原样打印123,123,123,这是因为你把数组中的那个元素作为一个字符串传递(“123,123,123”)如果你把它作为一个int数传递给 123123123 for循环也会传递它。
已编辑
对于这种情况,你可以稍微调整一下这段代码:
import numbers
mylist = ["xyz", "abc", "123,123,123", 456.78 , "pqr"]
for i in mylist:
# check if there is a number as element
if(isinstance(i , numbers.Number)):
pass
# check if there is a string element in array that includes any digits
elif(any(element.isdigit() for element in i)):
pass
# after filters that we applied , then print the element
else:
print (i)
结果将为xyz , abc , pqr
我认为您要求加入数组中的元素,为此您可以使用join(yourList)
代替print(i)
或者您想要的功能......
希望它可以帮助你解决这个问题。
答案 2 :(得分:0)
您可以使用一个循环尝试正则表达式:
data=["xyz", "abc", "123,123,123", 456.78 , "pqr",11111111]
import re
string_pattern=r'[a-zA-Z]+'
num_pattern1=r'[0-9.,]+'
s_=[]
i_=[]
for i in data:
a=re.search(string_pattern,str(i))
b=re.search(num_pattern1,str(i))
if a!=None:
s_.append(a.group())
elif b!=None:
if '.' in b.group():
i_.append(float(b.group()))
elif ',' in b.group():
i_.append(int(b.group().replace(',','')))
else:
i_.append(int(b.group()))
print(["".join(s_)]+i_)
输出:
['xyzabcpqr', 123123123, 456.78, 11111111]