我有一个包含浮点数和字符串的列表ex:[1.456,'upn',7.965,'bvb']如何将这些列表分成两个可读的列表 [1.456,7.95]和['upn','bvb']
答案 0 :(得分:3)
float_list = []
string_list = []
for item in first_list:
if isinstance(item, float):
float_list.append(item)
elif isinstance(item, str):
string_list.append(item)
答案 1 :(得分:3)
对于Python 2.x:
lst = [1.456, 'upn', 7.965, 'bvb']
[i for i in lst if isinstance(i, basestring)]
[i for i in lst if isinstance(i, float)]
对于Python 3.x:
lst = [1.456, 'upn', 7.965, 'bvb']
[i for i in lst if isinstance(i, str)]
[i for i in lst if isinstance(i, float)]
输出:
['upn', 'bvb']
[1.456, 7.965]
答案 2 :(得分:2)
一种方法是使用切片some_list[start:end:step]
:
b = a[::2]
c = a[1::2]
print b
print c
<强>输出:强>
[1.456, 7.965]
['upn', 'bvb']
注意:此方法仅在列表遵循模式[float, str, float, str...]
答案 3 :(得分:1)
filter(lambda x:type(x) == str,[1.456, 'upn', 7.965, 'bvb'])
filter(lambda x:type(x) == float,[1.456, 'upn', 7.965, 'bvb'])
答案 4 :(得分:0)
>>> mixed_list = [1.456, 'upn', 7.965, 'bvb']
>>> temp_list = sorted(mixed_list)
>>> output_tuple = next( (temp_list[:temp_list.index(i):1],temp_list[temp_list.index(i):]) for i in temp_list if type(i) == str)
>>> output_tuple[0]
[1.456, 7.965]
>>> output_tuple[1]
['bvb', 'upn']
>>> sorted(mixed_list)
[1.456, 7.965, 'bvb', 'upn']
首先,我对列表进行了排序,这些列表以float和string顺序排列它们。 然后我使用next作为迭代器来检查第一次出现'string',一旦我得到字符串,迭代器就会停止并给我们结果。 这似乎有点复杂,但它比其他方法更快,你必须迭代整个列表 如果你有一个很大的输入列表,它会非常有效。
答案 5 :(得分:0)
如果你有多个字符串和浮点数,你可以尝试按照type(x)
对列表中的元素进行排序,请参阅http://docs.python.org/2/library/types.html:
>>> from collections import defaultdict
>>> lst = [1.456, 'upn', 7.965, 'bvb']
>>> ddict = defaultdict(list)
>>> for i in lst:
... ddict[type(i)].append(i)
...
>>> for i in ddict:
... print i, ddict[i]
...
<type 'float'> [1.456, 7.965]
<type 'str'> ['upn', 'bvb']