pub trait PyListMethods<'py>: Sealed {
Show 20 methods
// Required methods
fn len(&self) -> usize;
fn is_empty(&self) -> bool;
fn as_sequence(&self) -> &Bound<'py, PySequence>;
fn into_sequence(self) -> Bound<'py, PySequence>;
fn get_item(&self, index: usize) -> PyResult<Bound<'py, PyAny>>;
unsafe fn get_item_unchecked(&self, index: usize) -> Bound<'py, PyAny>;
fn get_slice(&self, low: usize, high: usize) -> Bound<'py, PyList>;
fn set_item<I>(&self, index: usize, item: I) -> PyResult<()>
where I: IntoPyObject<'py>;
fn del_item(&self, index: usize) -> PyResult<()>;
fn set_slice(
&self,
low: usize,
high: usize,
seq: &Bound<'_, PyAny>,
) -> PyResult<()>;
fn del_slice(&self, low: usize, high: usize) -> PyResult<()>;
fn append<I>(&self, item: I) -> PyResult<()>
where I: IntoPyObject<'py>;
fn insert<I>(&self, index: usize, item: I) -> PyResult<()>
where I: IntoPyObject<'py>;
fn contains<V>(&self, value: V) -> PyResult<bool>
where V: IntoPyObject<'py>;
fn index<V>(&self, value: V) -> PyResult<usize>
where V: IntoPyObject<'py>;
fn iter(&self) -> BoundListIterator<'py> ⓘ;
fn locked_for_each<F>(&self, closure: F) -> PyResult<()>
where F: Fn(Bound<'py, PyAny>) -> PyResult<()>;
fn sort(&self) -> PyResult<()>;
fn reverse(&self) -> PyResult<()>;
fn to_tuple(&self) -> Bound<'py, PyTuple>;
}
Expand description
Implementation of functionality for PyList
.
These methods are defined for the Bound<'py, PyList>
smart pointer, so to use method call
syntax these methods are separated into a trait, because stable Rust does not yet support
arbitrary_self_types
.
Required Methods§
Sourcefn as_sequence(&self) -> &Bound<'py, PySequence>
fn as_sequence(&self) -> &Bound<'py, PySequence>
Returns self
cast as a PySequence
.
Sourcefn into_sequence(self) -> Bound<'py, PySequence>
fn into_sequence(self) -> Bound<'py, PySequence>
Returns self
cast as a PySequence
.
Sourcefn get_item(&self, index: usize) -> PyResult<Bound<'py, PyAny>>
fn get_item(&self, index: usize) -> PyResult<Bound<'py, PyAny>>
Gets the list item at the specified index.
§Example
use pyo3::{prelude::*, types::PyList};
Python::with_gil(|py| {
let list = PyList::new(py, [2, 3, 5, 7]).unwrap();
let obj = list.get_item(0);
assert_eq!(obj.unwrap().extract::<i32>().unwrap(), 2);
});
Sourceunsafe fn get_item_unchecked(&self, index: usize) -> Bound<'py, PyAny>
unsafe fn get_item_unchecked(&self, index: usize) -> Bound<'py, PyAny>
Gets the list item at the specified index. Undefined behavior on bad index. Use with caution.
§Safety
Caller must verify that the index is within the bounds of the list. On the free-threaded build, caller must verify they have exclusive access to the list via a lock or by holding the innermost critical section on the list.
Sourcefn get_slice(&self, low: usize, high: usize) -> Bound<'py, PyList>
fn get_slice(&self, low: usize, high: usize) -> Bound<'py, PyList>
Takes the slice self[low:high]
and returns it as a new list.
Indices must be nonnegative, and out-of-range indices are clipped to
self.len()
.
Sourcefn set_item<I>(&self, index: usize, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
fn set_item<I>(&self, index: usize, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
Sets the item at the specified index.
Raises IndexError
if the index is out of range.
Sourcefn del_item(&self, index: usize) -> PyResult<()>
fn del_item(&self, index: usize) -> PyResult<()>
Deletes the index
th element of self.
This is equivalent to the Python statement del self[i]
.
Sourcefn set_slice(
&self,
low: usize,
high: usize,
seq: &Bound<'_, PyAny>,
) -> PyResult<()>
fn set_slice( &self, low: usize, high: usize, seq: &Bound<'_, PyAny>, ) -> PyResult<()>
Assigns the sequence seq
to the slice of self
from low
to high
.
This is equivalent to the Python statement self[low:high] = v
.
Sourcefn del_slice(&self, low: usize, high: usize) -> PyResult<()>
fn del_slice(&self, low: usize, high: usize) -> PyResult<()>
Deletes the slice from low
to high
from self
.
This is equivalent to the Python statement del self[low:high]
.
Sourcefn append<I>(&self, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
fn append<I>(&self, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
Appends an item to the list.
Sourcefn insert<I>(&self, index: usize, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
fn insert<I>(&self, index: usize, item: I) -> PyResult<()>where
I: IntoPyObject<'py>,
Inserts an item at the specified index.
If index >= self.len()
, inserts at the end.
Sourcefn contains<V>(&self, value: V) -> PyResult<bool>where
V: IntoPyObject<'py>,
fn contains<V>(&self, value: V) -> PyResult<bool>where
V: IntoPyObject<'py>,
Determines if self contains value
.
This is equivalent to the Python expression value in self
.
Sourcefn index<V>(&self, value: V) -> PyResult<usize>where
V: IntoPyObject<'py>,
fn index<V>(&self, value: V) -> PyResult<usize>where
V: IntoPyObject<'py>,
Returns the first index i
for which self[i] == value
.
This is equivalent to the Python expression self.index(value)
.
Sourcefn iter(&self) -> BoundListIterator<'py> ⓘ
fn iter(&self) -> BoundListIterator<'py> ⓘ
Returns an iterator over this list’s items.
Sourcefn locked_for_each<F>(&self, closure: F) -> PyResult<()>
fn locked_for_each<F>(&self, closure: F) -> PyResult<()>
Iterates over the contents of this list while holding a critical section on the list. This is useful when the GIL is disabled and the list is shared between threads. It is not guaranteed that the list will not be modified during iteration when the closure calls arbitrary Python code that releases the critical section held by the iterator. Otherwise, the list will not be modified during iteration.
This is equivalent to for_each if the GIL is enabled.
Sourcefn sort(&self) -> PyResult<()>
fn sort(&self) -> PyResult<()>
Sorts the list in-place. Equivalent to the Python expression l.sort()
.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.