【问题标题】:Converting a tuple into two parts将元组转换为两部分
【发布时间】:2015-08-17 09:07:42
【问题描述】:
[('apples, 1,2,3,4,5,6,7,8,9,9,), ('banana, 1,2,46,7,8,5,345,2,1,4,), ('pear, ,7,8,5,6343,23,1,3,5,6,7,7,)]

以上数据位于外部 csv 文件中。我坚持编写一个定义来获取该数据并制作一个元组列表,其中包含一个名称字符串和一个数据点列表。数据点的字符串和列表应该在元组中

所以(str,int[])就像这样

【问题讨论】:

  • 你想要[[i[0], i[1:]] for i in lst]
  • 我认为你需要做更多的事情来将字符串中的元组解析成一个可以拆分的列表(或元组)。
  • 您不是说要将数据点转换为int's,对吗?那会在句号之后丢失数字。

标签: python string list tuples


【解决方案1】:

这比单行解决方案更具可读性!

def list_parser(l):
    for t in l:
        items = t[0].split(", ")
        category = items[0]
        number_strings = items[1:]
        numbers = [float(n) for n in number_strings]
        yield (category, numbers)

【讨论】:

  • 我同意,不要为此使用单行。至少在 Python 2 下。在 Python 3 下,具有用于模式匹配的解包运算符使单行更可行。
  • 它将显示'tuple' object has no attribute 'split' 尝试将t.split(", ") 更改为t[0].split(", ")
  • 我试过这段代码,它只打印了苹果数据??不知道如何获取其余数据。
  • 这个函数是一个生成器——你是怎么运行它的?您需要执行类似“for thing in list_parser(l): print thing”之类的操作。
【解决方案2】:

您想使用列表推导式。

[[i[0].split(",")[0], map(float, i[0].split(",")[1:])] for i in lst]

【讨论】:

  • 你需要在,拆分,这是一个单一的数据
  • 我认为 OP 实际上并不是指int。它也应该是一个元组列表,而不是一个列表列表。
  • 我也不确定,但它足够简单,可以让它浮动。编辑,实际上它确实是浮动的,因为 ints 没有工作
  • 我的意思是你根本不需要地图。
  • 鉴于信息存储在字符串中,我很确定您这样做
【解决方案3】:

这是一个有效的代码

x=[('apples, 21.72, 29.3, 20.08, 29.98, 29.85, 26.22, 19.99, 27.78, 27.02, 22.44, 26.54, 26.46, 22.24, 27.72, 22.25, 28.52, 25.57, 22.44, 27.06, 24.24, 21.74, 26.72, 27.23, 21.48, 26.14, 21.09, 28.28, 29.05, 23.52, 24.74, 29.08, 21.57, 21.98, 26.66, 21.99, 20.91, 28.07, 26.06, 22.54, 25.9, 21.78, 25.96, 25.25, 28.08, 23.79, 29.99, 21.41, 21.67, 22.94, 29.68',), ('banana, 57.51, 47.59, 55.89, 47.15, 46.71, 51.7, 46.68, 48.36, 52.15, 59.02, 45.1, 45.21, 51.13, 45.27, 57.24, 57.17, 49.47, 46.32, 42.47, 41.14, 46.86, 40.1, 58.67, 48.91, 48.21, 43.63, 43.11, 46.97, 52.07, 47.71, 53.27, 57.54, 56.19, 47.79, 45.32, 50.56, 51.23, 40.6, 48.03, 51.95, 54.54',), ('pear, 75.0, 82.43, 112.11, 89.93, 103.19, 80.6, 113.44, 105.44, 95.54, 121.98, 114.25, 109.84, 90.48, 105.84, 82.89, 113.64, 102.73, 104.57, 100.83, 75.59, 79.86, 91.11, 94.75, 109.89, 117.39, 74.71, 71.04, 92.97, 88.87, 92.95, 86.67, 101.46, 92.4, 85.2, 107.19, 117.81, 90.95, 82.02, 87.31, 106.53, 86.28, 106.62, 107.57, 89.38, 105.88, 74.45, 90.03, 107.96, 77.42, 98.9, 109.81, 102.51, 116.71, 82.92, 81.78, 74.42, 76.27, 73.84, 75.55, 102.29, 108.1, 98.84, 101.48, 77.75, 98.57, 70.31, 78.28, 80.18',)]
print [(i[0].split(",")[0],map(ast.literal_eval,[i.strip() for i in i[0].split(",")[1:]])) for i in x]

输出:

[('apples', [21.72, 29.3, 20.08, 29.98, 29.85, 26.22, 19.99, 27.78, 27.02, 22.44, 26.54, 26.46, 22.24, 27.72, 22.25, 28.52, 25.57, 22.44, 27.06, 24.24, 21.74, 26.72, 27.23, 21.48, 26.14, 21.09, 28.28, 29.05, 23.52, 24.74, 29.08, 21.57, 21.98, 26.66, 21.99, 20.91, 28.07, 26.06, 22.54, 25.9, 21.78, 25.96, 25.25, 28.08, 23.79, 29.99, 21.41, 21.67, 22.94, 29.68]), ('banana', [57.51, 47.59, 55.89, 47.15, 46.71, 51.7, 46.68, 48.36, 52.15, 59.02, 45.1, 45.21, 51.13, 45.27, 57.24, 57.17, 49.47, 46.32, 42.47, 41.14, 46.86, 40.1, 58.67, 48.91, 48.21, 43.63, 43.11, 46.97, 52.07, 47.71, 53.27, 57.54, 56.19, 47.79, 45.32, 50.56, 51.23, 40.6, 48.03, 51.95, 54.54]), ('pear', [75.0, 82.43, 112.11, 89.93, 103.19, 80.6, 113.44, 105.44, 95.54, 121.98, 114.25, 109.84, 90.48, 105.84, 82.89, 113.64, 102.73, 104.57, 100.83, 75.59, 79.86, 91.11, 94.75, 109.89, 117.39, 74.71, 71.04, 92.97, 88.87, 92.95, 86.67, 101.46, 92.4, 85.2, 107.19, 117.81, 90.95, 82.02, 87.31, 106.53, 86.28, 106.62, 107.57, 89.38, 105.88, 74.45, 90.03, 107.96, 77.42, 98.9, 109.81, 102.51, 116.71, 82.92, 81.78, 74.42, 76.27, 73.84, 75.55, 102.29, 108.1, 98.84, 101.48, 77.75, 98.57, 70.31, 78.28, 80.18])]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多