小编Ant*_*ala的帖子

Python字符串处理优化

最近我一直在制作一个python脚本,用于从大文本文件(> 1 GB)中提取数据.问题基本上总结为从文件中选择文本行,并从一些数组中搜索它们的字符串(此数组中最多可包含1000个字符串).这里的问题是我必须找到字符串的特定匹配项,并且该字符串在该文件中可能会出现无限次.此外,还需要一些解码和编码,这会进一步减慢脚本速度.代码看起来像这样:

strings = [a for a in open('file.txt')]

with open("er.txt", "r") as f:
    for chunk in f:
        for s in strings
            #do search, trimming, stripping ..
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法优化这个?我尝试了多处理,但它很少(或至少我实现它的方式)这里的问题是这些块操作不是独立的,strings列表可能在其中一个中被改变.任何优化都会有所帮助(字符串搜索算法,文件读取等)我尽可能多地做了关于循环中断的事情,但它仍然运行得很慢.

python string file-io

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

如何在SQL中合并2列与所有可能的组合?

这个问题听起来令人困惑,但看看:

这样我们就可以获得第一列(col1):

select distinct maker
from product
Run Code Online (Sandbox Code Playgroud)

第二列(col2):

select distinct type,maker
from product
Run Code Online (Sandbox Code Playgroud)

所以现在我需要从col1和col2获得所有可能的组合.有什么建议吗?

不久,这个:

A f1

B f2
Run Code Online (Sandbox Code Playgroud)

应该成为这样的:

A f1

A f2

B f1

B f2
Run Code Online (Sandbox Code Playgroud)

PS此查询不会返回我需要的内容.

select distinct A.maker, B.type
from product as A
Run Code Online (Sandbox Code Playgroud)

sql merge combinations ansi-sql

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

当从抽象基类继承时,为什么__slots__在Python 2和3中表现不同

我创建了以下类,以一种以内存效率的方式在平面上存储可变点 - 我需要一个可变的等价物namedtuple('Point', 'x y').由于实例字典很大,我想我会选择__slots__:

from collections import Sequence

class Point(Sequence):
    __slots__ = ('x', 'y')

    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __getitem__(self, item):
        return getattr(self, self.__slots__[item])

    def __setitem__(self, item, value):
        return setattr(self, self.__slots__[item], value)

    def __repr__(self):
        return 'Point(x=%r, y=%r)' % (self.x, self.y)

    def __len__(self):
        return 2
Run Code Online (Sandbox Code Playgroud)

在Python 3上测试时,一切似乎都没问题:

>>> pt = Point(12, 42)
>>> pt[0], pt.y
(12, 42)
>>> pt.x = 5
>>> pt
Point(x=5, y=42)
>>> pt.z = 6
Traceback …
Run Code Online (Sandbox Code Playgroud)

python python-2.x abstract-base-class python-3.x

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

使用 crcmod 在 Python 中重新创建 C CRC32 算法

我正在尝试在 Python 中解码 Novatel GPS 流,并且我已对同步、标头和有效负载的所有组件进行了排序,但我无法复制用作消息一部分的 CRC32。用于生成附加在消息上的 CRC 的算法用 c 编写如下:

#include <iostream>
#include <string>

using namespace std;

#define CRC32_POLYNOMIAL 0xEDB88320L
//#define CRC32_POLYNOMIAL 0x04C11DB7L

unsigned long CRC32Value(int i)
{
    int j;
    unsigned long ulCRC;
    ulCRC = i;
    for (j = 8; j > 0; j--)
    {
        if (ulCRC & 1)
            ulCRC = (ulCRC >> 1) ^ CRC32_POLYNOMIAL;
        else
            ulCRC >>= 1;
    }
    return ulCRC;
}
unsigned long CalculateBlockCRC32(
    unsigned long ulCount,
    unsigned char *ucBuffer)
{
    unsigned long ulTemp1;
    unsigned long …
Run Code Online (Sandbox Code Playgroud)

python crc32 python-2.x

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

如何在所有测试用例 BOOST C++ 之后运行函数

我有一个问题,我在思考;如果 C++ BOOST 库中有任何宏、功能,它将在所有测试用例之后运行一次函数。

我想运行一个函数,该函数将创建一个没有 json 文件的函数。已执行的测试,没有。通过测试的数量和数量。所有测试。所以我有这个问题,因为我必须使用以特定方式构建的文件:

f1()
f2()
f3()
BOOST_AUTO_TEST_CASE(f1){}
BOOST_AUTO_TEST_CASE(f2){}
BOOST_AUTO_TEST_CASE(f3){}

所以我无法创建 main() 函数来为我做到这一点,因为我收到一个错误,表明 /boost/test/unit_test.hpp 中有一个先前的声明。

先感谢您。问候。

c++ boost unit-testing

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

C中的Shell排序没有给出所需的结果

我需要在C中实现Shell排序并使用优化版本(其中间隙首先设置为数组/ 2的大小,然后将此数字重复除以2.2).问题是答案并不总是完全排序,我不确定这是因为我的代码中的某些逻辑错误还是Shell排序的一些缺点.

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAX 7

void shellSort(int *a, int size);
void insert(int *a, int next_pos, int gap);

void shellSort(int *a,int size)
{
    int gap = floor(size/2);
    int next_pos;
    while (gap>0)
    {
        for(next_pos = gap; next_pos < size; next_pos++)
            insert(a, next_pos, gap);

        if(gap == 2)
            gap = 1;
        else
            gap = (int)(gap/2.2);
    }
}

void insert(int *a, int next_pos, int gap)
{
    int value = a[next_pos];
    while(next_pos >= gap && a[next_pos] < …
Run Code Online (Sandbox Code Playgroud)

c sorting shellsort

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

使用C中的regex.h计算匹配数

regex.h在C中使用POSIX正则表达式来计算英语文本片段中短语的出现次数.但返回值regexec(...)仅表示是否找到匹配项.所以我尝试使用nmatchmatchptr找到不同的外观,但是当我打印出匹配时matchptr,我刚收到第一个短语的第一个索引出现在我的文本中.

这是我的代码:

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>

#define MAX_MATCHES 20 //The maximum number of matches allowed in a single string

void match(regex_t *pexp, char *sz) {
    regmatch_t matches[MAX_MATCHES];
    if (regexec(pexp, sz, MAX_MATCHES, matches, 0) == 0) {
    for(int i = 0; i < MAX_MATCHES; i++)
        printf("\"%s\" matches characters %d - %d\n", sz, matches[i].rm_so, matches[i].rm_eo);
    } 
    else {
        printf("\"%s\" does not match\n", sz);
    }
}

int main(int argc, char* argv[]) …
Run Code Online (Sandbox Code Playgroud)

c regex

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

如何为C中的2D阵列位置分配值?

所以我是一个新手,所以请软一点.

我已经创建了一个2D数组,60x30并希望通过执行双循环来在屏幕上将其显示为网格.我正在使用一个简单的字符'.' 对于网格的每个插槽只是为了测试.

char FrameBuffer[29][59];
for (int i = 0; i <= 29; i++) 
{
    for (int j = 0; j <= 59; j++)
    {
        FrameBuffer[i, j] = '.';
        printf("%c ", FrameBuffer[i,j]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试为我的2D数组中的位置赋值时,例如

FrameBuffer[0,1] = '.',
Run Code Online (Sandbox Code Playgroud)

我遇到了一个错误:

Expression must be a modifiable lvalue
Run Code Online (Sandbox Code Playgroud)

c arrays 2d

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

stdatomic (C11),关于 _Atomic 类型的三个问题

第一个问题

我在 cppreference 上找到了

  • _Atomic ( type-name ) (自 C11 起)

    用作类型说明符;这指定了一个新的原子类型

  • _Atomic type-name (2)(自 C11 起)

    用作类型限定符;这指定类型名称的原子版本。在此角色中,它可以与 const、volatility 和 limit 混合使用),尽管与其他限定符不同,类型名称的原子版本可能具有不同的大小、对齐方式和对象表示形式。

那么使用_Atomic(int)而不是_Atomic int 保证它的大小相同int或不同吗?

第二个问题

在 Ex 中使用限定符_Atomic

_Atomic(volatile int)
Run Code Online (Sandbox Code Playgroud)

抛出错误,但像这样使用它:

_Atomic(volatile _Atomic(int)*)
Run Code Online (Sandbox Code Playgroud)

才不是; 这是标准行为吗?

最后一个问题

我注意到原子函数(例如:atomic_storeatomic_loadatomic_compare_exchange_weak)可以在传递的类型不为_Atomic类型的情况下工作,并且我仍然可以毫无问题地管理竞争条件。这是标准行为吗?它有缺点或导致任何错误吗?

c types atomic c11

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

memmove是否将动态内存用于其临时数组

根据C11 N1570标准草案

7.24.2.2“ memmove功能”:

memmove函数将n字符从指向的对象复制到指向s2的对象s1复制发生就好像n从对象人物指向s2首先拷贝到一个临时数组n字符不重叠的对象指向s1s2,然后n从临时数组字符复制到对象指向s1

因此,如果我选择使用(file_size = 32K)移动大小为32K的缓冲区

memmove(io_Buffer, io_Buffer+17, file_size);
Run Code Online (Sandbox Code Playgroud)

临时缓冲区的大小不是32K吗?

程序可以自行分配动态内存吗?它会在那一行中分配和释放内存吗?

c memory

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