Python:将列表拆分为两个。一个浮点列表,一个字符串列表

时间:2014-02-16 22:04:27

标签: python

我有一个包含浮点数和字符串的列表ex:[1.456,'upn',7.965,'bvb']如何将这些列表分成两个可读的列表 [1.456,7.95]和['upn','bvb']

6 个答案:

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