Ребят, в общем у меня в продолжении темы появился вопрос. Если кто знает С++ - я хочу написать полный аналог данной проги на С++, но уже на Python.
Суть такова:
1. Завожу вектор строк
2. Удаляю ненужные элементы из вектора (при этом передаю вектор по
ссылке)
#include <iostream>
#include <vector>
#include <string>
void RemoveSuperfluousItems(const std::string& sPattern, std::vector<std::string>& items)
{
for (auto it = items.begin(); it != items.end();)
if (it->find(sPattern) == std::string::npos)
it = items.erase(it);
else
++it;
}
void Print(const std::vector<std::string>& items)
{
for (const auto& item : items)
std::cout << item << std::endl;
std::cout << std::endl;
}
int main(int argc, char* argv[])
{
std::vector<std::string> files = { "server1.sh", "server3.sh", "client1.sh", "server2.sh", "1.sh", "2.sh" };
Print(files);
RemoveSuperfluousItems("server", files);
Print(files);
return 0;
}
Вывод программы:
server1.sh
server3.sh
client1.sh
server2.sh
1.sh
2.sh
server1.sh
server3.sh
server2.sh
Работает вродё всё как ожидается.
Теперь пытаюсь провернуть подобное на Python'e
def removeSuperfluousItemsFromList(items, pattern):
_items = items[:]
for item in _items:
if pattern not in item:
_items.remove(item)
return _items
lst = ['1', 'server', '3']
print (lst)
lst = removeSuperfluousItemsFromList(lst, 'server')
print (lst)
Вывод программы:
['1', 'server', '3']
['server']
Но вот когда уже хочу скопировать список всех файлов в 2 массива (по сути хочу произвести копирование по значению и всё)
А вот пытаюсь заюзать подобную функцию в проге, которая фигурировала выше:
import re
def removeSuperfluousItemsFromList(items, pattern):
_items = items[:]
print ("Items length is %s" % len(_items))
for item in _items:
if pattern in item:
continue
else:
_items.remove(item)
print ("Items length is %s" % len(_items))
print (_items)
return _items
def tr(s):
digit_pattern = r'(\d+)\.sh$'
result = re.search(digit_pattern, s)
if result is None:
return 0
return int(result.group(1))
#remoteDir = "/home/andrey/test"
#files = os.listdir(remoteDir)
files = ['server1.sh', 'client1.sh', 'server2.sh', 'client4.sh', 'client.sh']
# тут хочу сделать копирование по значению (т.е. получить 2 независимых массива)
servers = files[:]
clients = files[:]
servers = removeSuperfluousItemsFromList(servers, 'server')
clients = removeSuperfluousItemsFromList(clients, 'client')
a = sorted(servers, key=tr)
b = sorted(clients, key=tr)
test = ['1.sh', '0.sh', 'test5.sh', 'test3.sh']
c = removeSuperfluousItemsFromList(test, 'test')
c = sorted(test, key=tr)
print (a)
print (b)
print (c)
на что получаю вывод:
Items length is 5
Items length is 3
['server1.sh', 'server2.sh', 'client.sh']
Items length is 5
Items length is 3
['client1.sh', 'client4.sh', 'client.sh']
Items length is 4
Items length is 3
['0.sh', 'test5.sh', 'test3.sh']
['client.sh', 'server1.sh', 'server2.sh']
['client.sh', 'client1.sh', 'client4.sh']
['0.sh', '1.sh', 'test3.sh', 'test5.sh']
как я понял проблема в присваивании, подскажите пожалуйста как пофиксить?
Т.е. по сути мне нужно реализовать функцию, которая будет производить манипуляции именно с тем объектом, для которого был вызван тот или иной метод
Спасибо!