String 如何连接列表中的纯文本元素,忽略数字字符串和其他元素?

String 如何连接列表中的纯文本元素,忽略数字字符串和其他元素?,string,python-3.x,String,Python 3.x,我有一个包含如下元素的列表 ["xyz", "abc", "123,123,123", 456.78 , "pqr"] 我只想将字符串中的元素合并为单个字符串,并将数字字符串转换为数字,如 [ "xyzabcpqr", 123123123, 456.78] 如何以pythonic的方式实现这一点?您可以使用: 事情是这样的: import numbers mylist = ["xyz", "abc", "123,123,123", 456.78 , "pqr"] for i in

我有一个包含如下元素的列表

["xyz", "abc", "123,123,123", 456.78 , "pqr"]
我只想将字符串中的元素合并为单个字符串,并将数字字符串转换为数字,如

[ "xyzabcpqr", 123123123, 456.78]
如何以pythonic的方式实现这一点?

您可以使用:

事情是这样的:

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'
您可以看到它按原样打印123123,这是因为您在数组中以字符串123123的形式传递了该元素,如果您以整数的形式传递该元素,例如123123,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

我想您要求在数组中加入元素,为此您可以使用joinyourList而不是printi或任何您想要的功能。。。
希望它能帮你解决这个问题。

也许这不是很漂亮,但它很管用

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]

您可以使用一个循环尝试正则表达式:

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]

谢谢数字作为字符串出现在列表中,我需要处理并忽略它作为数字。