“pythonic” method to parse a string of comma-separated integers into a list of integers?
我正在读取一个整数字符串,如"3 ,2 ,6",并希望它们在[3,2,6]列表中作为整数。这很容易被黑客攻击,但是"Python"的方式是什么?
1
| mylist = [int(x) for x in '3 ,2 ,6 '.split(',')] |
如果你不确定你只会有数字(或者想丢弃其他数字):
1
| mylist = [int(x) for x in '3 ,2 ,6 '.split(',') if x.strip().isdigit()] |
号
- 我觉得你有点倒退了:'3,2,6'.split(',')。
- @不管怎样,它还是可以正常工作的,int丢弃周围的空白。
- @是的,当我意识到这一点时,我编辑了它。但很明显我很快,就像一只狐狸,所以它没有显示我编辑过它(至少对我……);
- 现在像德尔南这样的人认为我是个白痴:(
- @红毛猩猩,对不起,下次我会比狐狸慢…:)
- 我知道这是一个古老的答案,但我想补充一下。如果有人需要在将输入强制转换为int()之前对其进行验证(如果您不这样做,则会引发异常),那么您只需在末尾添加if x.isdigit()。
- @约翰鲁德尔在我的回答中加了这个。
- 如果不需要处理负整数,那么fwiw,.isdigit就可以了。
1
| map( int, myString.split(',') ) |
- +功能风格1
- @马特:事实上,虽然我个人喜欢功能性风格,但列表理解更像是Python。
- @伊莱,同意100%
- 有没有办法,s="a,b;c,d"来slist=['a'、'b']、['c'、'd']?
- 在python 3中,必须将其包装在list调用中,因为map返回迭代器而不是列表。由此可见:list(map(int, my_string.split(',')))。
虽然定制解决方案将教您关于Python的知识,但对于生产代码来说,使用csv模块是最好的主意。逗号分隔的数据可能比最初显示的数据更复杂。
- 我想知道逗号分隔的整数是如何得到复数的?
- @谁说它们必须是整数?OP只提供了样本数据…
- @阿努拉格:"教他钓鱼……"——听过这个寓言吗?这就是我想做的。仅仅解析一个逗号字符串很少是一个人试图解决的任务,在这之后有更复杂的需求。如果我错了,没有造成伤害,其他答案提供了更简单的方法
- @OP说,"我在读一个整数串…"当然,对于一个健壮的解决方案,最好使用ELI推荐的csv模块。
- 糟糕:美元。谢谢。
- @Eli,我听说过这个寓言,但有时对于非常具体的问题,我们不需要使用复杂的解决方案,比如使用csv模块来读取整数列表。