Python - Splitting List That Contains Strings and Integers
1 | myList = [ 4,'a', 'b', 'c', 1 'd', 3] |
如何将此列表拆分为两个列表,一个包含字符串,另一个包含优雅/Python式的整数?
输出:
1 2 3 | myStrList = [ 'a', 'b', 'c', 'd' ] myIntList = [ 4, 1, 3 ] |
号
注意:没有实现这样一个列表,只是考虑如何找到一个优雅的答案(有吗?)对这样一个问题。
正如其他人在评论中提到的,您真的应该开始考虑如何首先除去保存在同构数据中的列表。但是,如果真的不能做到这一点,我将使用默认dict:
1 2 3 4 5 6 7 | from collections import defaultdict d = defaultdict(list) for x in myList: d[type(x)].append(x) print d[int] print d[str] |
您可以使用列表理解:
1 2 3 4 5 6 7 | >>> myList = [ 4,'a', 'b', 'c', 1, 'd', 3] >>> myIntList = [x for x in myList if isinstance(x, int)] >>> myIntList [4, 1, 3] >>> myStrList = [x for x in myList if isinstance(x, str)] >>> myStrList ['a', 'b', 'c', 'd'] |
号
1 2 3 4 5 6 7 8 9 | def filter_by_type(list_to_test, type_of): return [n for n in list_to_test if isinstance(n, type_of)] myList = [ 4,'a', 'b', 'c', 1, 'd', 3] nums = filter_by_type(myList,int) strs = filter_by_type(myList,str) print nums, strs >>>[4, 1, 3] ['a', 'b', 'c', 'd'] |
根据原始列表中的类型拆分列表
1 2 3 4 5 6 7 8 | myList = [ 4,'a', 'b', 'c', 1, 'd', 3] types = set([type(item) for item in myList]) ret = {} for typeT in set(types): ret[typeT] = [item for item in myList if type(item) == typeT] >>> ret {<type 'str'>: ['a', 'b', 'c', 'd'], <type 'int'>: [4, 1, 3]} |
。
1 2 3 4 5 6 7 8 9 10 | n = (input("Enter string and digits:")) d=[] s=[] for x in range(0,len(n)): if str(n[x]).isdigit(): d.append(n[x]) else s.append(n[x]) print(d) print(s) |
。
编辑1:这里是另一个解决方案
1 2 3 4 5 6 | import re x = input("Enter any string that contains characters and integers:") s = re.findall('[0-9]',x) print(s) c = re.findall('[a-z/A-Z]',x) print(c) |
您可以使用此代码作为示例,使用函数isdigit()创建两个不同的列表,该函数检查字符串中的整数。
1 2 3 4 5 6 7 8 | ip=['a',1,2,3] m=[] n=[] for x in range(0,len(ip): if str(ip[x]).isdigit(): m.append(ip[x]) else:n.append(ip[x]) print(m,n) |
我将通过回答python常见问题解答来总结这个线程:"您如何编写一个以任意顺序接受各种类型参数的方法?"
假设所有参数的从左到右顺序都不重要,请尝试此操作(基于@mgilson的答案):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def partition_by_type(args, *types): d = defaultdict(list) for x in args: d[type(x)].append(x) return [ d[t] for t in types ] def cook(*args): commands, ranges = partition_by_type(args, str, range) for range in ranges: for command in commands: blah blah blah... |
现在你可以打电话给
1 | # TODO make the strings collect the ranges, preserving order |
。
1 2 3 4 5 6 7 8 9 10 | import strings; num=strings.digits; str=strings.letters; num_list=list() str_list=list() for i in myList: if i in num: num_list.append(int(i)) else: str_list.append(i) |
。