4

给定以下代码中的列表 (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"
4

5 回答 5

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]

于 2012-11-13T03:02:26.227 回答
2

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

于 2012-11-13T02:59:18.210 回答
2
integers = filter(lambda x: isinstance(x,int), listEx)

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

等等...

于 2012-11-13T03:24:48.233 回答
1

Pythonfor循环迭代实际的对象引用。您可能会看到奇怪的行为,部分原因是您将对象引用 i 提供给数字列表索引应该去的地方(该语句listEx[i]没有意义。数组索引可以是 i = 0...length_of_list 的值,但在某一点 i= “莫伊兹”)

每次找到一个项目时,您也会替换整个列表 ( strList = listEx[i])。相反,您可以使用 将新元素添加到列表的末尾,但这里有一个更简洁且稍微更 Python 的替代方法,它使用称为list comprehensionsstrList.append(i)的非常有用的 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
[]
于 2012-11-13T03:07:11.947 回答
-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)  
于 2012-11-13T15:39:37.773 回答