如何在列表中仅加入文本元素,忽略数字字符串和其他元素?

时间:2018-03-20 05:32:29

标签: string python-3.x

我有一个包含

等元素的列表
["xyz", "abc", "123,123,123", 456.78 , "pqr"]

我想只将字符串中的元素连接成一个字符串,并将数字字符串转换为数字,例如

[ "xyzabcpqr", 123123123, 456.78]

如何以pythonic方式完成?

3 个答案:

答案 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]