【问题标题】:What is the best way make an array out of my data in python?用python中的数据制作数组的最佳方法是什么?
【发布时间】:2014-02-19 11:33:27
【问题描述】:

我是 python 新手,我需要帮助来制作/表示这种数据类型的数组。

link1|2-3,6-9,12-13|4-5,10-11,14-16

格式为link_name|boundary1|boundary2 我需要将值 Aboundary1Bboundary2

这应该会导致:

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

【问题讨论】:

  • 顺便说一句,边界的长度各不相同 - 例如2-78, 100-125 等 以上提供的示例数据仅用于演示目的。希望这会有所帮助。
  • 我认为在有人花时间帮助您之前,您需要展示解决问题的尝试

标签: python arraylist


【解决方案1】:

虽然可能不如基于字典的方法那么有效,但这也可以完成工作:

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]))

这会按照您的要求生成输出(使用制表符分隔):

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

【讨论】:

  • 不客气!我希望它能解决你的问题,因为我认为其他一些建议并不完全正确
【解决方案2】:

这是我想出的:

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”。我使用代码的前四行将您的范围数据转换为这种格式:

[(2,3), (6,9), (12,13)]

然后进行列表推导对数据进行分类。

【讨论】:

  • 当我尝试前 4 行时...发生错误... Traceback(最近一次调用最后一次):文件“”,第 1 行,在 IndexError: list index超出范围
  • @user3267156 打印您的数据并查看其外观。此代码与您在问题中提供的条目完美配合。
  • 非常感谢 sashkello,这与我的数据库完美配合。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    你可能需要python中的字典:

    data = {}
    def mapToDict(boundary, value):
        for item in boundary.split(','):
            for position in item.split('-'):
                data[position]=value
    
    s='link1|2-3,6-9,12-13|4-5,10-11,14-16'
    items = s.split('|')
    
    mapToDict(items[1],'A')
    mapToDict(items[2],'B')
    
    print data
    

    输出:

    {'11': 'B', '10': 'B', '13': 'A', '12': 'A', '14': 'B', '16': 'B', '3': 'A', '2': 'A', '5': 'B', '4': 'B', '6': 'A', '9': 'A'}
    

    【讨论】:

      【解决方案5】:
      def create_lsit(boundry_list):
          list_t = []
          for i in boundry_list:
                  l = i.split('-')
                  ran = range(eval(l[0]),eval(l[1])+1)
                  for j in ran:
                      list_t.append(j)
          return list_t
      
      def create_dic(dic,input_list, val):
          for i in input_list:
              dic[i] = val
      
      def get_some(link_name,boundary1,boundary2):
              main_dic = {}
              boundry1 = create_lsit(boundary1.split(','))
              create_dic(main_dic,boundry1, 'a')
              boundry2 = create_lsit(boundary2.split(','))
              create_dic(main_dic,boundry2, 'b')
      
              for key in sorted(main_dic.keys()):
                  print key, '   ', main_dic[key]
      
      data = 'link1|2-3,6-9,12-13|4-5,10-11,14-16'.split('|')     
      get_some(data[0],data[1],data[2])
      

      这可能很长,但我认为这就是您要找的。​​p>

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 2010-11-20
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        相关资源
        最近更新 更多