相关疑难解决方法(0)

在Python中从文件中读取n行(但不是全部)

迭代文件时如何从文件中读取 n 行而不是仅读取一行?我有一个具有明确结构的文件,我想做这样的事情:

for line1, line2, line3 in file:
    do_something(line1)
    do_something_different(line2)
    do_something_else(line3)
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

ValueError:太多值无法解压

现在我正在这样做:

for line in file:
    do_someting(line)
    newline = file.readline()
    do_something_else(newline)
    newline = file.readline()
    do_something_different(newline)
... etc.
Run Code Online (Sandbox Code Playgroud)

这很糟糕,因为我正在编写无休止的“ newline = file.readline()”,这使代码变得混乱。有什么聪明的方法可以做到这一点吗?(我真的想避免一次读取整个文件,因为它很大)

python file

3
推荐指数
1
解决办法
4713
查看次数

从列表中获取两元组

我只是使用python从列表中提取了一些数据,但认为它过于复杂和unpythonic,并且可能有更好的方法来做到这一点.我其实很确定我在标准库文档中看到了这个,但我的大脑拒绝告诉我在哪里.

所以这里:

输入:

x = range(8) # any even sequence
Run Code Online (Sandbox Code Playgroud)

输出:

[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)

我的看法:

[ [x[i], x[i+1]] for i in range(len(x))[::2] ]
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
3490
查看次数

Python:在列表中对x元素求和

我无法使用搜索功能找到答案,所以我开始这个帖子.

考虑使用可由x划分的列表.例如:

onetonine = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,示例x将为3.

现在我想创建一个新的列表

len(onetonine)/x
Run Code Online (Sandbox Code Playgroud)

元素,这意味着3个元素.

重要的是,我希望新列表的元素是旧列表的每个x元素的总和.这意味着:

newlist = [6, 15, 24]
Run Code Online (Sandbox Code Playgroud)

因此,基本上采用旧列表中的x = 3个元素并添加它们.重复直到完成.

我无法为此获得有效的解决方案,所以我正在寻求帮助.

谢谢.

python sum list

3
推荐指数
1
解决办法
64
查看次数

我该如何打开平面清单?

请理解,我搜索了这个,它已经有了答案.但是我正在寻找一种不同的方法来获得这个结果.这可能被标记为重复,虽然我认为这可能使用itertools (最有可能groupby)有一个更清晰的答案.

说我有一个清单data.我希望一次有3个值,假设列表是值的数量,以便最后排除不正确的值.

data = [1, 2, 3, 4, 5, 6,...]
Run Code Online (Sandbox Code Playgroud)

这是我想要遍历列表的方式(这段代码显然不起作用):

for a, b, c in data:
    #perform operations
    pass
Run Code Online (Sandbox Code Playgroud)

现在有了上面的代码,我想a, b, c成为1, 2, 3然后4, 5, 6分别在每个迭代.我确信那里有一个更清洁的方法,而不是我链接的答案.

对于那些不想点击链接以查看我所指的方法的懒人,这里是:

如果要通过成对的连续元素遍历列表,则可以使用切片:

>>>myList = [4, 5, 7, 23, 45, 65, 3445, 234]
>>>for x,y in (myList[i:i+2] for i in range(0,len(myList),2)):
print(x,y)

4 5
7 23
45 65
3445 234
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
1
解决办法
81
查看次数

如何将python元组转换为二维表?

输入上的平面(一维)元组:

data = ('a','b','c'.....'z');
Run Code Online (Sandbox Code Playgroud)

输出:具有n(比如9)列的表(两个维度)

table = ?what code here?
Run Code Online (Sandbox Code Playgroud)

所以

print table
 ( ('a','b','c'...), ('k','l','m','n'...), ....)
Run Code Online (Sandbox Code Playgroud)

这是最短的方法吗?

python

2
推荐指数
1
解决办法
3051
查看次数

计算文件中某个三联体的数量(DNA密码子分析)

这个问题实际上是用于DNA密码子分析,用简单的方式来说,假设我有一个这样的文件:
atgaaaccaaag ...
而且我想计算这个文件中存在的'aaa'三元组的数量.重要的是,三元组从一开始就开始(这意味着atg,aaa,cca,aag,......)因此在这个例子中结果应该是1而不是2'aaa'.
有没有Python或Shellscript方法来做到这一点?谢谢!

python shell bioinformatics

2
推荐指数
1
解决办法
3644
查看次数

以3组为单位打印python列表

我有一个包含107个名字的列表,我想以3个左右的组形式打印出来,每个名称用一个标签分隔,每行后面有一个换行符,直到结束.我怎样才能做到这一点?

for item in list print item我只能得到每场的行1名,这是很好的我想,但我想更适合在控制台一次,所以我想在每行打印3名左右的名字,因为我去通过列表,而不是:

name1
name2
name3
name4
name5
name6
Run Code Online (Sandbox Code Playgroud)

我会得到:

name1     name2     name3
name4     name5     name6
Run Code Online (Sandbox Code Playgroud)

有点难以找到答案,我无法想出我需要的东西,或者我能理解的东西,我发现的大多数事情只是处理len()range()混淆了我.有一些简单的方法可以做到这一点吗?谢谢!

[edit:update]使用@ inspectorG4dget的示例:

for i in range(0, len(listnames), 5):
    print '\t\t'.join(listnames[i:i+5])
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:http://www.pasteall.org/pic/show.php?id = 41159

我怎样才能清理干净,以便每列中的所有内容都很好地对齐?我想要的容易吗?

python printing iteration tabs list

2
推荐指数
1
解决办法
2505
查看次数

PyMongo的批量写入操作具有生成器功能

我想使用PyMongo的批量 写入操作功能,这些功能可以批量执行写操作,以减少网络往返次数并提高计算吞吐量.

我在这里也发现可以使用5000作为批号.

但是,我不希望批号的最佳大小以及如何在下面的代码中将PyMongo的批量写入操作功能与生成器结合起来?

from pymongo import MongoClient
from itertools import groupby
import csv


def iter_something(rows):
    key_names = ['type', 'name', 'sub_name', 'pos', 's_type', 'x_type']
    chr_key_names = ['letter', 'no']
    for keys, group in groupby(rows, lambda row: row[:6]):
        result = dict(zip(key_names, keys))
        result['chr'] = [dict(zip(chr_key_names, row[6:])) for row in group]
        yield result


def main():
    converters = [str, str, str, int, int, int, str, int]
    with open("/home/mic/tmp/test.txt") as c:
    reader = csv.reader(c, skipinitialspace=True)
    converted = ([conv(col) for conv, …
Run Code Online (Sandbox Code Playgroud)

python bulkinsert mongodb pymongo python-2.7

2
推荐指数
1
解决办法
907
查看次数

在迭代中获得一个元素和以下元素的优雅/高效方法

所以我有一个问题,我有一个iterable(字符串或列表在这里)喜欢string = "ABCDEFG",我想输出类似的东西

A-B
B-C
C-D
...
F-G
Run Code Online (Sandbox Code Playgroud)

所以我知道这有效(忘了处理indexError,但无论如何),但它很难看......

for i in range(len(myString)):
    element1 = myString[i]
    element2 = myString[i+1]
    print("theshit")
Run Code Online (Sandbox Code Playgroud)

有没有办法以更优雅/ pythonic的方式做到这一点?我认为itertools可以是一个解决方案,但我不知道它是如何工作的..

顺便说一句,我myString只需要这个循环所以也许生成器(不知道如何使用它,我还在学习)

谢谢 :)

python list python-itertools

2
推荐指数
1
解决办法
61
查看次数

Python 将数据帧分成块

我有 1 列 df,有 37365 行。我需要将其分成如下所示的块:

df[0:2499]
df[2500:4999]
df[5000:7499]
...
df[32500:34999]
df[35000:37364]
Run Code Online (Sandbox Code Playgroud)

这个想法是在如下循环中使用它(process_operation 不适用于大于 2500 行的 dfs)

while chunk <len(df):
    process_operation(df[lower:upper])
Run Code Online (Sandbox Code Playgroud)

编辑:我将有不同的数据帧作为输入。其中一些小于 2500。捕获这些的最佳方法是什么?

Ej: df[0:1234] because 1234<2500
Run Code Online (Sandbox Code Playgroud)

python pandas

2
推荐指数
1
解决办法
5959
查看次数