首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python中的数据制作数组的最佳方法是什么?

用python中的数据制作数组的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-02-19 11:33:27
回答 5查看 98关注 0票数 0

我是python的新手,我需要帮助从这个数据类型创建/表示一个数组。

代码语言:javascript
复制
link1|2-3,6-9,12-13|4-5,10-11,14-16

格式是link_name|boundary1|boundary2,我需要将值A放到boundary1,把B放到boundary2

这将导致以下结果:

代码语言:javascript
复制
position :  2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
value    :  A A B B A A A A  B B   A  A  B  B  B
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-19 11:41:37

这就是我想出来的:

代码语言:javascript
复制
data = data.split('|')[1]
data = data.split(',')
data = [d.split('-') for d in data]
data = [(int(d[0]), int(d[1])) for d in data]

positions = range(2, 17)
values = ['A' if any(data[j][1] >= i >= data[j][0] for j in range(len(data))) else 'B' for i in positions]

基本上,除了第一个范围列表之外,不需要任何信息,因为默认情况下,任何不是'A‘的信息都是'B’。我使用代码的前四行将您的范围数据放入这种格式:

代码语言:javascript
复制
[(2,3), (6,9), (12,13)]

然后进行列表理解来对数据进行分类。

票数 0
EN

Stack Overflow用户

发布于 2014-02-19 12:03:09

虽然可能不像基于字典的方法那样高效,但这也完成了以下工作:

代码语言:javascript
复制
data = "link1|2-3,6-9,12-13|4-5,10-11,14-16"
link_name, boundary_1, boundary_2 = data.split("|")
boundary_1 = [(b, "A") for b in boundary_1.split(",")] 
boundary_2 = [(b, "B") for b in boundary_2.split(",")]
temp = boundary_1 + boundary_2
# We sort the temp list based on the starting point
temp = sorted(temp, key=lambda x: int(x[0].split("-")[0]))
position = []
value = []
for pair, letter in temp:
    start, stop = pair.split("-")
    # We loop through all the intermittent values that are not in the input
    for val in range(int(start), int(stop)+1):
        position.append(val)
        value.append(letter)

print "position:\t{}".format("\t".join([str(x) for x in position]))
print "value:   \t{}".format("\t".join([x for x in value]))

这将生成所请求的输出(与制表符分离):

代码语言:javascript
复制
position:   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16
value:      A   A   B   B   A   A   A   A   B   B   A   A   B   B   B
票数 1
EN

Stack Overflow用户

发布于 2014-02-19 11:44:15

你可能想要一本字典之类的东西。

代码语言:javascript
复制
line = "link1|2-3,6-9,12-13|4-5,10-11,14-16"
a, b = line.split("|")[1:] 
a = [item for i in a.split("-") for item in i.split(",")]
b = [item for i in b.split("-") for item in i.split(",")]
data = {k:"A" for k in a}
data.update({k:"B" for k in b})

print data
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21879228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档