img
содержит только имя изображения, но не полную информацию о пути.
Вместо этого создайте исходный путь при указании исходного изображения:
import os
source_folder = 'C:/Users/Admin-dsc/Documents/.../buses and motorcycles'
images = os.listdir(source_folder)
destination_folder = 'C:/Users/Admin-dsc/Documents/.../Buses'
for img in images:
filename = os.path.basename(img)
copyfile(os.path.join(source_folder, img), os.path.join(destination_folder, filename))
нет, словарь еще более эффективен для возвращения вещей, учитывая ключ.
список, которого все еще необходимо выполнить итерации через список для нахождения то, что Вы хотите. Словарь делает поиск.
Если у Вас просто будет Список, то выполнение выбора LINQ просканирует через каждый объект в списке, сравнивающем его с тем, который Вы ищете.
Словарь однако вычисляет хэш-код строки, которую Вы ищете (возвращенный методом GetHashCode). Это значение затем используется для поиска строки более эффективно. Для большего количества информации о том, как это работает, посмотрите Википедию.
Если у Вас будут больше, чем несколько строк, начальная буква (Список), то метод начнет становиться крайне медленным.
По моему скромному мнению, подход Словаря будет НАМНОГО быстрее, чем LINQ, поэтому если у Вас будет массив с большим количеством объектов, необходимо скорее использовать Словарь.
Словарь реализован как хеш-таблица. Таким образом это должно предоставить постоянный доступ времени для поисков. Список реализован как динамический массив, предоставив Вам линейный доступ времени.
На основе базовых структур данных Словарь должен все еще дать Вам лучшую производительность.
Документы MSDN о Словаре
http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
и Список