【问题标题】:Write a column next to list in csv_python在 csv_python 中的列表旁边写一列
【发布时间】:2013-11-28 05:16:55
【问题描述】:

我有两个列表,当我使用以下方法分别打印它们时:

writer.writerows(list_)

我明白了

list_1:

0   -0.00042    0.004813    0.010428    0.051006
1   0.000053    0.004531    0.010447    0.051962
2   0.000589    0.004518    0.009801    0.052226
3   0.000083    0.004581    0.010362    0.052288
4   -0.000192   0.003726    0.011258    0.051094
5   0.000281    0.004078    0.01008     0.052156

list_2:

-0.000419554    -0.000366128    0.000223134     0.000306416     0.000114709

一整天我一直在尝试将 list_2 作为另一列添加到 list_1 并将它们写入 csv 文件。我认为这很简单,但卡住了。感谢您的帮助。

【问题讨论】:

  • 那么,list_1 是列表列表吗?
  • 你试过什么没用?
  • 是 list_2 的元素应该写成一个新行,还是每个元素都应该写在 list_1 行的末尾?如果 list_2 中没有足够的元素,你想发生什么?此示例显示 list_2 中的五个元素和 list_1 中的六行。
  • @BurhanKhalid 认为将 list_2 附加到 list_1 可能会有所帮助。使用 writerow(list1+list2),将它们分别写入文件,将两个列表添加到新列表并使用 zip 函数。但没有任何帮助。
  • @PeterDeGlopper 实际上两个列表都有相同数量的元素,是的 lis_2 元素将添加到 lis_1 中每一行的末尾

标签: python list csv multiple-columns writer


【解决方案1】:

将两个列表(或其他可迭代对象)中的列组合在一起的通用解决方案:

import csv
import itertools
import sys

def combine_columns(iterable1, iterable2):
    for x, y in itertools.izip(iterable1, iterable2):
        yield list(x) + list(y)

list1 = [[11, 12, 13], [21, 22, 23]]
list2 = [[14, 15], [24, 25]]
writer = csv.writer(sys.stdout)
writer.writerows(combine_columns(list1, list2))

输出:

11,12,13,14,15
21,22,23,24,25

【讨论】:

  • 我可能只使用生成器表达式而不是新的生成器定义:writer.writerows(list(x) + list(y) for (x, y) in itertools.izip(list_1, list_2))。但要点概括。
  • 为什么我会得到 'TypeError: 'numpy.float64' object is not iterable' 使用此代码?
  • @PyLearner 使用二维数组,而不仅仅是平面数组。例如:numpy.array([[14, 15], [24, 25]], dtype=numpy.float64)
  • @alexanderlukanin13 所以,这意味着我不能使用这种方法添加像list_=[10,20,30] 这样的列表,因为itertools 不能迭代?无论如何,这个izip 方法在我的代码的另一部分幸存下来。非常感谢:)
【解决方案2】:

这是一个例子,不知道你的数据是什么样的,所以我不得不猜测:

list_1 = [
    [1,2,3],
    [4,5,6],
    [7,8,9],
]
list_2 = [10,20,30]

list_1 = [row + [col] for row, col in zip(list_1, list_2)]
for row in list_1:
    print row

输出:

[1, 2, 3, 10]
[4, 5, 6, 20]
[7, 8, 9, 30]

现在 list_1 已将 list_2 作为新列,您可以使用 csv 模块将其写出。

【讨论】:

  • 谢谢吴海。干得好!
  • 请注意,如果此解决方案和使用zip 的任何其他解决方案的长度不同,它们将截断为较短的列表。评论说它们是相等的,所以这可能无关紧要,但示例列表的长度不同。
  • @PeterDeGlopper,顺便说一句,当列表大小不同时应该使用什么函数?
  • 那是izip_longest :)
猜你喜欢
  • 2021-09-09
  • 2020-11-09
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多