2012-10-04 42 views
1

我想说我是编程和Python的新手。在发布这个问题之前,我确实尝试过研究,但是即使是基础知识的缺乏也没有产生任何结果,因此需要我在这里提问。Python:结合两个字符串并从中选择独特的元素

我有两个字符串这是这样的:

str_a = "100,101,105,304" 
str_b = "400,500,101" 

我需要这些字符串合并成一个,所以我使用:

str_c = str_a + "," + str_b 

我的问题,从这里开始。在这个新字符串中,用逗号分隔元素(数字),我希望每个项目只列出一次。数字的顺序并不重要,但如果它是上升的,那将是相当惊人的。

我可以做些什么来结合这两个,每个数字列出一次,如果可能的话,从小到大订购?

由于这些是字符串,我甚至不确定是否可以迭代?

您的帮助将不胜感激,在此先感谢。

+0

可以遍历通过Python中的字符串,例如'for i in string:'。只是一个侧面说明。 – squiguy

+0

你最终想要什么?一个字符串?您可以迭代的唯一编号列表?还有别的吗? – ernie

回答

3

试试这个:

str_a = "100,101,105,304" 
str_b = "400,500,101,2000" 
l = str_a.split(',') + str_b.split(',') 
print ','.join(sorted(set(l), key=int)) 

输出是:

100,101,105,304,400,500,2000 

感谢Oren的评论!我已添加key=int作为sorted的额外参数,以将列表中的元素作为整数而不是字符串进行比较。该参数允许指定一个参数的函数,该参数将在列表的每个元素上调用以提取比较键。在我们的例子中,我们使用int将每个元素转换为整数。

+2

请注意,排序将部分比较为字符串(即'a'<'b'和'1111'<'2'),而不评估数字。在只有3位数字的情况下,它可以正常工作,但更通用的解决方案是:'print','。join(sorted(set(l),key = int))' – Oren

+2

有关更多详细信息,这里的一般方法是将每个字符串转换为一个列表,并按逗号分割。然后将两者合并。 'set()'移除重复的元素,'sorted()'排序,并且join()将它们全部结合成一个以逗号分隔的字符串 – ernie

+1

谢谢安东,这是一个非常简单而优雅的解决方案。谢谢奥伦和厄尼的亲切解释。真的很感谢恩妮花了你的时间。非常感谢。而奥伦,我会检查那个关键的东西,看起来很有趣。 – Phil

1

您希望使用分割法来分割字符串起来:

str_a_vals = str_a.split(",") 
str_b_vals = str_b.split(",") 

然后做:

allVals = str_a_vals 
allVals += str_b_vals 

str_c = ",".join(set(allVals)) 
+0

为什么'.extend'?用'str_a_vals + str_b_vals'追加列表/集合会不会更好? – alvas

+0

不熟悉该语法。 – CrazyCasta

+0

谢谢crazycasta为您的答案,并花时间。欣赏它! – Phil

0

如果你想做类似于排序和选择数字的东西,将数字存储在字符串中可能不是正确的方法。尝试使用列表,像这样:

list_a = [100,101,105,304] 
list_b = [400,500,101] 

获取组合列表的独特元素将是那么容易,因为

unique = set(list_a + list_b) 

并以升序让他们为

ascending = sorted(list_a + list_b)