在Python中分隔列表元素

时间:2012-11-13 02:54:17

标签: python string list

鉴于以下代码中的列表(listEx),我试图将字符串和整数和浮点类型分开,并将它们全部放在各自的列表中。如果我只想从listEx列表中提取字符串,程序应该通过listEx,并将字符串放在一个名为strList的新列表中,然后将其打印给用户。类似地,对于整数和浮点类型也是如此。但是,如果我能找到正确的方法来做一个,我会对其他人好。到目前为止没有运气,现在已经持续了一个小时。

listEx = [1,2,3,'moeez',2.0,2.345,'string','another string', 55]
strList=['bcggg'] 

for i in listEx:
    if type(listEx) == str:
        strList = listEx[i]
        print strList[i]
    if i not in listEx:
        break
    else:
        print strList

for i in strList:
    if type(strList) == str:
        print "This consists of strings only"
    elif type(strList) != str:
        print "Something went wrong"
    else:
        print "Wow I suck"

5 个答案:

答案 0 :(得分:3)

也许代替if type(item) == ...,使用item.__class__item告诉你它的类。

import collections
listEx = [1,2,3,'moeez',2.0,2.345,'string','another string', 55]
oftype = collections.defaultdict(list)
for item in listEx:
    oftype[item.__class__].append(item)

for key, items in oftype.items():
    print(key.__name__, items)

产量

int [1, 2, 3, 55]
str ['moeez', 'string', 'another string']
float [2.0, 2.345]

因此,您要查找的三个列表可以oftype[int]访问, oftype[float]oftype[str]

答案 1 :(得分:2)

只需将type(strList)type(listEx)更改为type(i)即可。您正在遍历列表,但随后检查列表是否为字符串,而不是是否为字符串。

答案 2 :(得分:2)

integers = filter(lambda x: isinstance(x,int), listEx)

strings = filter(lambda x: isinstance(x,str), listEx)

依旧......

答案 3 :(得分:1)

Python for在实际对象引用上循环iterate。您可能会看到奇怪的行为,部分原因是您给出了数字列表索引所在的对象引用i(语句listEx[i]没有意义。数组索引可以是i = 0 ... length_of_list的值,但是在某一点i =“moeez”)

每次找到项目时,您也会替换整个列表(strList = listEx[i])。您可以使用strList.append(i)在列表的末尾添加一个新元素,但这里有一个更简洁,更加pythonic的替代方法,它使用一个名为list comprehensions的非常有用的python结构在一行中创建整个列表。

listEx = [1,2,3,'moeez',2.0,2.345,'string','another string', 55]
strList = [ i for i in listEx if type(i) == str ] 

给出:

print strList
>>> print strList
['moeez', 'string', 'another string']

其余的,

>>> floatList = [ i for i in listEx if type(i) == float ] 
>>> print floatList
[2.0, 2.345]

>>> intList = [ i for i in listEx if type(i) == int ] 
>>> intList
[1, 2, 3, 55]

>>> remainders = [ i for i in listEx 
    if ( ( i not in  strList ) 
          and (i not in  floatList ) 
          and ( i not in intList) )  ]
>>> remainders
[]

答案 4 :(得分:-1)

     python 3.2
     listEx = [1,2,3,'moeez',2.0,2.345,'string','another string', 55]

     strList = [ i for i in listEx if type(i) == str ] 
     ## this is list comprehension ##

     ###  but you can use conventional ways.

     strlist=[]                   ## create an empty list.          
     for i in listex:             ## to loop through the listex.
             if type(i)==str:     ## to know what type it is
                    strlist.append(i)        ## to add string element
     print(strlist)    



     or:
     strlist=[]
     for i in listex:
            if type(i)==str:
                strlist=strlist+[i]

     print(strlist)