我想从字符串中提取字符并在python中将这些字符填充到两个不同的集合中?

2024-04-25 17:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

  1. comp = "{1},{2},{3},{1,2},{2,3}"
  2. 我希望上面的字符串被分配到2个不同的集合。S0_list = [{1},{2},{3}] and S1_list = {1,2},{2,3}.

  3. 代码基本上必须遍历上面字符串(comp)中的每个字符,并将单个元素({1},{2})放在S0中,将双元素({1,2},{2,3})放在S1中。

  4. 这是我目前掌握的密码。你知道吗

    S0_list = []
    S1_list = []
    new_set = set()
    comp = "{1},{2},{3},{1,2},{2,3}"
    pos = 0
    S0_list = S1_list = [0]
    
    while pos < len(comp):
        if comp[pos] == '{':
           pos = pos + 1
           count = 1
    
    
    while comp[pos] != '}':
        pos = pos + 1
        if comp[pos] == ',':
            count = count + 1
        if count == 1:
            S0_list.append(new_set)
    
        elif count == 2:
            S1_list.append(new_set)
    

    pos=pos+1

有人能帮我一下吗?我的问题格式不好。你知道吗


Tags: and字符串代码pos元素newifcount
3条回答

另一种选择:

import sys

comp = "{1},{2},{3},{1,2},{2,3}"
set_size1 = set()
set_size2 = set()

[getattr(sys.modules[__name__], "set_size{}".format(s.count(",") + 1)).add(s)
 for s in [v if idx == 0 else "{" + v for idx, v in enumerate(comp.split(",{"))]]

print set_size1, set_size2

输出:

set(['{3}', '{1}', '{2}']) set(['{1,2}', '{2,3}'])

一点解释我们使用list comprehension迭代字符串并split它,然后我计算字符串中的,个数,用这个数我们可以得到正确的集合对象(根据它的名称)来使用getattar更新

在这里,您可以设置更多的大小以获得不同的元素,例如,让我们添加一个3位数的选项:

import sys

comp = "{1},{2},{3},{1,2},{2,3},{2,3,4}"
set_size1 = set()
set_size2 = set()
set_size3 = set()

[getattr(sys.modules[__name__], "set_size{}".format(s.count(",") + 1)).add(s)
 for s in [v if idx == 0 else "{" + v for idx, v in enumerate(comp.split(",{"))]]

print set_size1, set_size2, set_size3

输出:

set(['{3}', '{1}', '{2}']) set(['{1,2}', '{2,3}']) set(['{2,3,4}'])

您可以尝试这样做,找到{}中的组,用逗号分隔它们并检查其长度

import re
S0_list = []
S1_list = []
comp = "{1},{2},{3},{1,2},{2,3}"

for proto_set in re.findall('{([\d,?]+)}', comp):
    set_elements = set(proto_set.split(","))
    if len(set_elements)  > 1: 
        S1_list.append(set_elements)
    else:
        S0_list.append(set_elements)

注意,comp中的语法基本上已经是有效的Python了,所以我们可以eval()它(假设它不是来自用户的不可信输入!)地址:

>>> comp = "{1},{2},{3},{1,2},{2,3}"

>>> values = eval('(' + comp + ')')
>>> values
(set([1]), set([2]), set([3]), set([1, 2]), set([2, 3]))

>>> S0_list = [x for x in values if len(x) == 1]
>>> S1_list = [x for x in values if len(x) == 2]
>>> S0_list
[set([1]), set([2]), set([3])]
>>> S1_list
[set([1, 2]), set([2, 3])]

相关问题 更多 >