【问题标题】:Python: Create a list of tuplesPython:创建元组列表
【发布时间】:2019-11-20 07:06:02
【问题描述】:

我想创建一个元组列表并拥有这张表:

Nr  Name        Value   F/R
1   6347_sx     123.98  F
2   hff_475     234.99  F
3   sjdh_65     123.67  R
4   6347_sx     345.12  R

我想要一个这样的列表:

norm_list = [('6347_sx',123.98), ('hff_475',234.99), ('sjdh_65',123.67), ('6347_sx',345.12)] 

我尝试了这个,但它没有给我想要的输出:

norm_file = open("table.txt")

norm_list = []

for norm_line in norm_file.readlines():
    norm_file_elements = norm_line.split()

    x = norm_file_elements[1]
    y = norm_file_elements[2]
    norm_list= [(x,y)]
    print(norm_list)

y 值必须是 int。 感谢您的帮助。

【问题讨论】:

  • norm_list.append((x,y))
  • norm_list = [tuple(line.split()[1:3]) for line in norm_file]
  • 我希望 y 值为 int。我怎样才能做到这一点?

标签: python python-3.x list tuples


【解决方案1】:

您需要将元素附加到循环内的列表中。在您的代码示例中,您始终将变量设置为单个元素的列表,而不是追加。

因此,如下更改您的代码:

norm_file = open("table.txt")

norm_list = []

for norm_line in norm_file.readlines():
    norm_file_elements = norm_line.split()

    x = norm_file_elements[1]
    y = norm_file_elements[2]
    norm_list.append((x,y))
print(norm_list)

【讨论】:

  • 我希望 y 值为 int。我怎么得到它?
  • y = int(norm_file_elements[2])
【解决方案2】:

试试 zip 功能

这很容易

print(list(zip(norm_file_elements[1], norm_file_elements[2]))

【讨论】:

  • 我希望 y 值为 int。我怎样才能做到这一点?
  • 将其转换为 int() 数据类型,如 int(norm_file_elements[2])
【解决方案3】:

你可以使用re.findall:

s = """
Nr  Name        Value   F/R
1   6347_sx     123.98  F
2   hff_475     234.99  F
3   sjdh_65     123.67  R
4   6347_sx     345.12  R
"""
d = re.findall('\w+_\w+|\d+\.\d+', s)
result = [(d[i], d[i+1]) for i in range(0, len(d), 2)]

输出:

[('6347_sx', '123.98'), ('hff_475', '234.99'), ('sjdh_65', '123.67'), ('6347_sx', '345.12')]

你也可以使用re.split解包:

t = list(filter(None, s.split('\n')))
_, *data = [(a, b) for _, a, b, _ in map(lambda x:re.split('\s+', x), t)]

输出:

[('6347_sx', '123.98'), ('hff_475', '234.99'), ('sjdh_65', '123.67'), ('6347_sx', '345.12')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 2016-01-10
    • 1970-01-01
    • 2011-11-10
    • 2015-11-27
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多