В настоящее время я пытаюсь создать список из 100 элементов, каждый из которых является подсписком с 3 значениями.

Эти значения генерируются randint (0,1000) , причем каждое значение каждого подсписка уникально. Например, если x1list = [1,2,3], x2list = [4,5,6] и x3list = [7,8,9] ... я хочу, чтобы список тестов содержал < strong> [[1,4,7], [2,5,8], [3,6,9]] .

Вот мой код на данный момент, я новичок в программировании, поэтому заранее прошу прощения, если он неэффективен / базовый.

import random
from random import randint

x1list = []
x2list = []
x3list = []
sublist = []

for i in range(100):
    x1list.append(randint(0,1000))
    x2list.append(randint(0,1000))
    x3list.append(randint(0,1000))

n = 0
for i in range(100):
    sublist.append(x1list[n])
    sublist.append(x2list[n])
    sublist.append(x3list[n])

    n += 1

testlist = [[value] for value in sublist]

Цель состоит в том, чтобы список тестов стал последним списком длиной 100, содержащим 100 подсписок длины 3, как описано ранее. Однако в настоящее время понимание списка, которое у меня есть с testlist, дает мне список длиной 300, где каждый элемент в testlist является случайным целым числом, которое является собственным списком .

Еще одно решение, которое я попробовал с пониманием списка, приблизило меня к моей конечной цели, но с другой проблемой ...

Вместо этого замените строку понимания списка testlist следующим:

testlist = [[x, y, z] for x in x1list for y in x2list for z in x3list]

Получился тестовый список , содержащий подсписки по 3 значения в каждом, однако тестовый список имел длину 1000000 элементов и, по-видимому, изменял только одно значение (x, y или z, не все 3) для каждого подсписка.

Есть идеи, как получить для этого желаемый результат? Я проверил некоторые другие сообщения stackoverflow, и они несколько помогли мне добраться до этого момента, но я как бы натолкнулся на стену в этом.

Вот сообщения, которые я просмотрел, чтобы довести меня до этого момента:

Как превратить список строк в список подсписков с каждой строкой в каждом подсписке?

Python Создать список подсписков из списка

Создание подсписок из «Списка». Последнее мне не очень помогло, так как Мне не удалось заставить zip () работать.

Заранее благодарим за любую помощь, которую вы можете оказать!

0
Nathan Hare 24 Ноя 2020 в 04:53

3 ответа

Лучший ответ

Вы можете zip три списка вместе:

import random
from random import randint

x1list = []
x2list = []
x3list = []

for i in range(100):
    x1list.append(randint(0,1000))
    x2list.append(randint(0,1000))
    x3list.append(randint(0,1000))

sublist = list(map(list, zip(x1list, x2list, x3list)))
print(sublist)
2
Aplet123 24 Ноя 2020 в 01:57

Может быть, вы могли бы использовать random.sample, если вам нужно быть уверенным of "с каждым значением каждого подсписка уникальным " :

Возвращает список уникальных элементов длиной k, выбранных из совокупности последовательность или набор. Используется для случайной выборки без замены .

>>> import random
>>> groups = 100
>>> group_size = 3
>>> data = random.sample(range(1001), group_size * groups)
>>> data
[39, 82, 518, 423, 735, 92, 709, 489, 318, 394, 89, 478, 847, 835, 819, 119, 905, 750, 279, 783, 36, 919, 294, 602, 238, 880, 324, 196, 716, 109, 265, 151, 108, 876, 827, 562, 98, 360, 534, 618, 705, 10, 581, 491, 608, 816, 564, 228, 748, 267, 361, 631, 903, 14, 63, 64, 643, 380, 65, 91, 55, 803, 802, 468, 606, 273, 180, 390, 982, 85, 815, 88, 216, 984, 904, 28, 654, 968, 487, 483, 289, 565, 11, 314, 977, 384, 809, 723, 126, 711, 718, 516, 513, 721, 192, 589, 981, 424, 350, 837, 611, 435, 963, 403, 431, 890, 985, 351, 309, 595, 245, 311, 875, 254, 21, 577, 509, 474, 814, 541, 326, 946, 217, 75, 949, 704, 420, 303, 257, 97, 242, 694, 381, 391, 364, 586, 261, 150, 594, 202, 669, 922, 659, 649, 670, 881, 200, 124, 23, 76, 225, 872, 826, 825, 439, 457, 493, 211, 647, 70, 844, 372, 785, 57, 852, 683, 53, 530, 841, 918, 865, 67, 165, 640, 286, 598, 159, 224, 913, 322, 925, 901, 186, 944, 42, 833, 376, 834, 945, 824, 860, 275, 916, 686, 118, 264, 952, 751, 272, 535, 229, 994, 496, 416, 836, 405, 485, 212, 511, 856, 185, 103, 556, 756, 912, 898, 130, 428, 667, 207, 414, 775, 679, 555, 172, 993, 40, 884, 19, 455, 396, 960, 90, 566, 955, 743, 726, 894, 48, 51, 291, 763, 576, 843, 797, 789, 831, 61, 962, 838, 325, 59, 515, 508, 790, 206, 772, 943, 426, 125, 685, 698, 418, 149, 695, 862, 791, 336, 52, 851, 452, 382, 854, 84, 195, 330, 752, 458, 941, 584, 222, 956, 769, 935, 697, 78, 845, 877, 781, 256, 582, 260, 733, 189, 652, 609, 147, 888, 136, 49]
>>> [data[i:i+group_size] for i in range(0, len(data), group_size)]
[[39, 82, 518], [423, 735, 92], [709, 489, 318], [394, 89, 478], [847, 835, 819], [119, 905, 750], [279, 783, 36], [919, 294, 602], [238, 880, 324], [196, 716, 109], [265, 151, 108], [876, 827, 562], [98, 360, 534], [618, 705, 10], [581, 491, 608], [816, 564, 228], [748, 267, 361], [631, 903, 14], [63, 64, 643], [380, 65, 91], [55, 803, 802], [468, 606, 273], [180, 390, 982], [85, 815, 88], [216, 984, 904], [28, 654, 968], [487, 483, 289], [565, 11, 314], [977, 384, 809], [723, 126, 711], [718, 516, 513], [721, 192, 589], [981, 424, 350], [837, 611, 435], [963, 403, 431], [890, 985, 351], [309, 595, 245], [311, 875, 254], [21, 577, 509], [474, 814, 541], [326, 946, 217], [75, 949, 704], [420, 303, 257], [97, 242, 694], [381, 391, 364], [586, 261, 150], [594, 202, 669], [922, 659, 649], [670, 881, 200], [124, 23, 76], [225, 872, 826], [825, 439, 457], [493, 211, 647], [70, 844, 372], [785, 57, 852], [683, 53, 530], [841, 918, 865], [67, 165, 640], [286, 598, 159], [224, 913, 322], [925, 901, 186], [944, 42, 833], [376, 834, 945], [824, 860, 275], [916, 686, 118], [264, 952, 751], [272, 535, 229], [994, 496, 416], [836, 405, 485], [212, 511, 856], [185, 103, 556], [756, 912, 898], [130, 428, 667], [207, 414, 775], [679, 555, 172], [993, 40, 884], [19, 455, 396], [960, 90, 566], [955, 743, 726], [894, 48, 51], [291, 763, 576], [843, 797, 789], [831, 61, 962], [838, 325, 59], [515, 508, 790], [206, 772, 943], [426, 125, 685], [698, 418, 149], [695, 862, 791], [336, 52, 851], [452, 382, 854], [84, 195, 330], [752, 458, 941], [584, 222, 956], [769, 935, 697], [78, 845, 877], [781, 256, 582], [260, 733, 189], [652, 609, 147], [888, 136, 49]]
0
Shash Sinha 24 Ноя 2020 в 02:19

Попробуй понимание списка

from random import randint
mylist = [[randint(0,1000),randint(0,100),randint(0,1000)] for x in range(100)]
print(mylist)
2
Wasif Hasan 24 Ноя 2020 в 01:56
64979174