Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:非常基础,可以';I don’我不明白为什么它不是拆分成所列的较大数字,而是拆分成单个整数_Python - Fatal编程技术网

Python:非常基础,可以';I don’我不明白为什么它不是拆分成所列的较大数字,而是拆分成单个整数

Python:非常基础,可以';I don’我不明白为什么它不是拆分成所列的较大数字,而是拆分成单个整数,python,Python,这里有一个很快的问题,其他一些人在另一个问题上帮助了我,但我无法让他们的任何代码正常工作,因为我不理解这里一些非常基本的东西 8000.5 16745 0.1257 8001.0 16745 0.1242 8001.5 16745 0.1565 8002.0 16745 0.1595 8002.5 16745 0.1093 8003.0 16745 0.1644 我有一个这样的数据文件,当我键入 f1 = open(sys

这里有一个很快的问题,其他一些人在另一个问题上帮助了我,但我无法让他们的任何代码正常工作,因为我不理解这里一些非常基本的东西

8000.5   16745     0.1257
8001.0   16745     0.1242
8001.5   16745     0.1565
8002.0   16745     0.1595
8002.5   16745     0.1093
8003.0   16745     0.1644
我有一个这样的数据文件,当我键入

f1 = open(sys.argv[1], 'rt')
for line in f1:
    fields = line.split()
    print list(fields [0])
我得到输出

['1', '6', '8', '2', '5', '.', '5']
['1', '6', '8', '2', '6', '.', '0']
['1', '6', '8', '2', '6', '.', '5']
['1', '6', '8', '2', '7', '.', '0']
['1', '6', '8', '2', '7', '.', '5']
['1', '6', '8', '2', '8', '.', '0']
['1', '6', '8', '2', '8', '.', '5']
['1', '6', '8', '2', '9', '.', '0']
然而,我希望通过试用打印列表(字段)之类的东西,可以得到

[16825.5, 162826.0 ....] 
我错过了什么明显的东西


谢谢

删除
列表
.split()
已返回列表

您正在将字段的第一个元素转换为列表:

>>> fields = ['8000.5', '16745', '0.1257']
>>> fields[0]
'8000.5'
>>> list(fields[0])
['8', '0', '0', '0', '.', '5']
如果要将第一列作为列表,可以边运行边生成列表:

myfirstcolumn = []
for line in f1:
    fields = line.split()
    myfirstcolumn.append(fields[0])
这可以简化为列表理解:

myfirstcolumn = [line.split()[0] for line in f1]

删除
列表
.split()
已返回列表

您正在将字段的第一个元素转换为列表:

>>> fields = ['8000.5', '16745', '0.1257']
>>> fields[0]
'8000.5'
>>> list(fields[0])
['8', '0', '0', '0', '.', '5']
如果要将第一列作为列表,可以边运行边生成列表:

myfirstcolumn = []
for line in f1:
    fields = line.split()
    myfirstcolumn.append(fields[0])
这可以简化为列表理解:

myfirstcolumn = [line.split()[0] for line in f1]

问题是您正在将正确提取的第一个字段转换为
列表

以下是打印第一列的解决方案:

with open(sys.argv[1]) as f1:
   first_col = []
   for line in f1:
      fields = line.split()
      first_col.append(fields[0])

   print first_col
给出:

['8000.5', '8001.0', '8001.5', '8002.0', '8002.5', '8003.0']
<>而不是执行<代码> f1=打开(sys .ARGV(1),“RT”)< /C> >考虑使用<>代码> >在完成或例外情况下关闭文件。另外,由于默认设置为
r
ead和
t
ext模式,因此我停止了
rt

最后,也可以使用以下方法编写:


问题是您正在将正确提取的第一个字段转换为
列表

以下是打印第一列的解决方案:

with open(sys.argv[1]) as f1:
   first_col = []
   for line in f1:
      fields = line.split()
      first_col.append(fields[0])

   print first_col
给出:

['8000.5', '8001.0', '8001.5', '8002.0', '8002.5', '8003.0']
<>而不是执行<代码> f1=打开(sys .ARGV(1),“RT”)< /C> >考虑使用<>代码> >在完成或例外情况下关闭文件。另外,由于默认设置为
r
ead和
t
ext模式,因此我停止了
rt

最后,也可以使用以下方法编写:


最后一个命令就是问题所在

打印列表(字段[0])
从拆分列表中提取第0项,然后将其转换为列表


由于您已经有了一个字符串列表,
['8000.5'、'16745'、'0.1257']
,所以第0项是一个字符串,当对其应用
list()
时,它将转换为单个元素的列表。

最后一个命令就是问题所在

打印列表(字段[0])
从拆分列表中提取第0项,然后将其转换为列表


由于您已经有了一个字符串列表,
['8000.5'、'16745'、'0.1257']
,所以第0项是一个字符串,当对其应用
list()
时,它将转换为单个元素的列表。

您的第一个问题是对字符串应用
list

list("123") == ["1", "2", "3"]
其次,在文件中每行打印一次,但似乎要收集每行的第一项并一次性打印

第三,在Python 2中,对
open
的调用中没有“t”模式(默认为文本模式)

我想你想要的是:

with open(sys.argv[1], 'r') as f:
    print [ line.split()[0] for line in f ]

第一个问题是对字符串应用
list

list("123") == ["1", "2", "3"]
其次,在文件中每行打印一次,但似乎要收集每行的第一项并一次性打印

第三,在Python 2中,对
open
的调用中没有“t”模式(默认为文本模式)

我想你想要的是:

with open(sys.argv[1], 'r') as f:
    print [ line.split()[0] for line in f ]

其他人已经很好地回答了这个问题,你看到的行为是因为你在字符串上使用
list
<代码>列表将获取您可以迭代的任何对象,并将其转换为列表--一次一个元素。这并不奇怪,除了对象甚至不需要有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法(字符串就是这种情况)——关于
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

在任何情况下,请尝试以下代码并查看它打印出的内容:

>>> def enlighten_me(obj):
...     print (list(obj))
...     print (hasattr(obj))
...
>>> enlighten_me("Hello World") 
>>> enlighten_me( (1,2,3,4) )  
>>> enlighten_me( {'red':'wagon',1:5} )
当然,您可以尝试使用集合、列表、生成器。。。您可以迭代的任何内容

Levon给出了一个很好的答案,关于如何在读取文件时创建列。我将使用内置的zip函数演示同样的事情

rows=[]
for row in myfile:
    rows.append(row.split())

#now rows is stored as [ [col1,col2,...] , [col1,col2,...], ... ]
此时,我们可以通过(Levon的回答)得到第一列:

或者更简洁地说:

column1=[row[0] for row in rows]  #<-- This is called a list comprehension
将iter1[0]与iter2[0]相匹配,并将iter1[1]与iter2[1]相匹配,诸如此类——如果你仔细想想,有点像拉链。但是,zip可以接受不止两个参数

zip(iter1,iter2,iter3) #results in [ [iter1[0],iter2[0],iter3[0]] , [iter1[1],iter2[1],iter3[1]], ... ]
现在,我们需要的最后一块拼图是用星运算符解包参数。 如果我有一个函数:

def foo(a,b,c):
    print a
    print b
    print c
我可以这样调用该函数:

A=[1,2,3]
foo(A[0],A[1],A[2])
foo(*A)
或者,我可以这样称呼它:

A=[1,2,3]
foo(A[0],A[1],A[2])
foo(*A)
希望这是有意义的——star在将列表中的每个元素传递给foo之前将其“解压缩”

因此,将这些部分放在一起(请记住返回到行列表),我们可以将行列表解包并将其传递给zip,zip将匹配每行(即列)中的相应索引

现在要获得第一列,我们只需执行以下操作:

columns[0]  #first column
对于列表列表,我喜欢将
zip(*list\u of\u list)
看作是一种穷人的转置


希望这会有所帮助。

其他人已经在回答这个问题上做了大量工作,您看到的行为是因为您正在字符串上使用
列表<代码>列表
将获取您可以迭代的任何对象,并将其转换为列表--一次一个元素。这并不奇怪,除了对象甚至不必有
\uuuuuu iter\uuuuu
方法(这是字符串的情况)——关于
\uuuuuuuu iter\uuuuu
有很多帖子,所以我不会