【问题标题】:how to do certain data processing in python?如何在python中进行某些数据处理?
【发布时间】:2010-10-29 03:31:52
【问题描述】:

我有两个字符串列表,格式如下:

[x1,x2,x3,x4,...] [y1,y2,y3,y4...]

称它为 lst1。

lst2 将是:

[x1',x2',x3',x4',...] [y1,y2,y3,y4,...]

您可以假设 lst1 中的每个字符串在 lst2 中的相应元素中都有匹配的 y,并且 x 的数量相同,但是如果某些 x 和 x' 的长度不同,则抛出错误会很好。

然后,我想合并lst1和lst2,方式如下:

创建一个新的字符串列表,其中:

[x1-x1',x2-x2',....] [y1,y2,y3,y4...]

我真的很想知道会提出什么样的解决方案......我是 python 新手,我想看看有哪些不同的方式来处理这种类型的数据处理(其中我做了很多)。

谢谢。

【问题讨论】:

  • [x1,x2,x3,x4,...] [y1,y2,y3,y4...] 如何是一个列表?这不是两个列表吗?
  • 我很困惑,里面有 X 的列表是第一个吗?或者是 [x...][y...] 列表之一?即列表一是列表列表吗?
  • 发布一个预处理和后处理列表的实际示例?
  • 它是一个字符串列表...所以它应该是 x1 dash x1'...
  • 这个列表是这样的字符串:"[a,b,c,d,e] [x,y,z,w,u]" -- 表示两个括号内的子字符串跨度>

标签: python


【解决方案1】:
(sub(a,b) for (a,b) in itertools.izip(lst1, lst2))

sub() 是您想要在各个字符串之间进行的任何类型的“减法”

【讨论】:

  • 我查看了 itertools.izip。我认为这行不通,但是使用 itertools 的想法可能很有用。我不知道。谢谢。 (我认为您正在假设不同的格式或不同的任务。)
  • 如果他想要一个列表,我想你的意思是 [sub(a,b) for (a,b) in itertools.izip(lst1, lst2)]
  • @stler:原来的问题有很多歧义;但在你想做的几乎每一种列表处理中,答案都是从 itertools 开始的
  • @jared:总的来说,我更喜欢使用生成器,因为它们可以进一步组合,并且只在最后遍历。无需创建大量中间数组
  • @Javier:太好了。当我学习 Python 时,它们并不存在。我已经习惯了 C# 中的 LINQ 或 Haskell 内置的惰性列表。是时候为这位老 Python 程序员学习一个新的(对我而言)库了。
【解决方案2】:

根据上面的评论,- 实际上不是减法,而是字符串中的破折号,

还取决于你想如何处理结果?作为一个列表:

["%s-%s"%(a,b) for (a,b) in itertools.izip(lst1, lst2)]

或作为迭代器:

("%s-%s"%(a,b) for (a,b) in itertools.izip(lst1, lst2))

另外,您可以使用zip 而不是itertools.izip,但我不知道它的含义。

【讨论】:

  • 在 python 2.x 中,zip() 在返回之前创建 zip()ed 列表,而 izip() 返回一个生成器
【解决方案3】:

哦等等——你有两个字符串,其中有括号和项目作为字符? 这就是我从您的评论中推断出来的 """ 该列表包含如下所示的字符串:"[a,b,c,d,e] [x,y,z,w,u]" - 表示两个括号子字符串 – stler 28 分钟前 """ -

这与人们从您的问题中所理解的完全不同,因为列表是 python 中的本机对象。

要处理这样的字符串,您必须在“]”字符上将其分开(使用拆分方法),然后在逗号处:

lst1 = "[a,b,c,d,e] [x,y,z,w,u]"
lst2 = "[1,2,3,4,5] [x,y,z,w,u]"

# part the strings in two parts:
part1, part2 = lst1.split("]",1)

# isolate the elements in part1:
part1 = part1.split(",")
# separate the desired elements from string 2: split at "]", throw "[" away, split at  ",":
part3= lst2.split("]")[0].strip("[").split(",")

parts_list = []

for element1, element2 in zip(part1, part3):
  if len(element1.strip("[")) != len(element2):
      raise ValueError("List parts differ in lenght")
  parts_list.append("%s-%s" % (element1, element2))

final_list = ",".join(parts_list) + "]" + part2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2011-09-28
    • 2012-03-08
    • 2022-01-23
    相关资源
    最近更新 更多