Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions crates/polars-expr/src/dispatch/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ pub(super) fn slice(args: &mut [Column]) -> PolarsResult<Column> {
return Ok(list_ca.lst_slice(offset, slice_len).into_column());
},
(1, length_slice_len) => {
let list_ca = if list_ca.len() == 1 {
list_ca.new_from_index(0, length_slice_len)
} else {
list_ca.clone()
};
check_slice_arg_shape(length_slice_len, list_ca.len(), "length")?;
let offset = offset_s.get(0).unwrap().try_extract::<i64>()?;
// cast to i64 as it is more likely that it is that dtype
Expand Down
13 changes: 13 additions & 0 deletions py-polars/tests/unit/operations/namespaces/list/test_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -1366,3 +1366,16 @@ def test_list_sample_fraction_with_replacement_27344() -> None:

result = df.select(pl.col("x").list.sample(fraction=2, with_replacement=True))
assert result["x"][0].to_list() == [1, 1]


def test_list_slice_broadcast_27480() -> None:
result = pl.select(
pl.lit([0, 1, 2]).list.slice(0, pl.lit(pl.Series([1, 2, 3]))).alias("broadcast")
)
expected = pl.select(
pl.repeat(pl.lit([0, 1, 2]), 3)
.list.slice(0, pl.lit(pl.Series([1, 2, 3])))
.alias("broadcast")
)

assert_frame_equal(result, expected)
Loading