鉴于以下代码中的列表(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"
答案 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)